import Std.Tactic.BVDecide

/-
The benchmarks are binary and trees with 2^n variables where n increases each line
-/

-- Our benchmark terms are huge, no need to waste time on linting
set_option linter.all false

example (_ : x = 1#1) (x1 : BitVec 1) (x0 : BitVec 1) (_ : (x0 &&& x1) = x) : x0 = 1#1 := by bv_decide (config := { embeddedConstraintSubst := false, andFlattening := false})
example (_ : x = 1#1) (x1 : BitVec 1) (x0 : BitVec 1) (_ : (x0 &&& x1) = x) (x11 : BitVec 1) (x10 : BitVec 1) (_ : (x10 &&& x11) = x1) (x01 : BitVec 1) (x00 : BitVec 1) (_ : (x00 &&& x01) = x0) : x00 = 1#1 := by bv_decide (config := { embeddedConstraintSubst := false, andFlattening := false})
example (_ : x = 1#1) (x1 : BitVec 1) (x0 : BitVec 1) (_ : (x0 &&& x1) = x) (x11 : BitVec 1) (x10 : BitVec 1) (_ : (x10 &&& x11) = x1) (x111 : BitVec 1) (x110 : BitVec 1) (_ : (x110 &&& x111) = x11) (x101 : BitVec 1) (x100 : BitVec 1) (_ : (x100 &&& x101) = x10) (x01 : BitVec 1) (x00 : BitVec 1) (_ : (x00 &&& x01) = x0) (x011 : BitVec 1) (x010 : BitVec 1) (_ : (x010 &&& x011) = x01) (x001 : BitVec 1) (x000 : BitVec 1) (_ : (x000 &&& x001) = x00) : x000 = 1#1 := by bv_decide (config := { embeddedConstraintSubst := false, andFlattening := false})
example (_ : x = 1#1) (x1 : BitVec 1) (x0 : BitVec 1) (_ : (x0 &&& x1) = x) (x11 : BitVec 1) (x10 : BitVec 1) (_ : (x10 &&& x11) = x1) (x111 : BitVec 1) (x110 : BitVec 1) (_ : (x110 &&& x111) = x11) (x1111 : BitVec 1) (x1110 : BitVec 1) (_ : (x1110 &&& x1111) = x111) (x1101 : BitVec 1) (x1100 : BitVec 1) (_ : (x1100 &&& x1101) = x110) (x101 : BitVec 1) (x100 : BitVec 1) (_ : (x100 &&& x101) = x10) (x1011 : BitVec 1) (x1010 : BitVec 1) (_ : (x1010 &&& x1011) = x101) (x1001 : BitVec 1) (x1000 : BitVec 1) (_ : (x1000 &&& x1001) = x100) (x01 : BitVec 1) (x00 : BitVec 1) (_ : (x00 &&& x01) = x0) (x011 : BitVec 1) (x010 : BitVec 1) (_ : (x010 &&& x011) = x01) (x0111 : BitVec 1) (x0110 : BitVec 1) (_ : (x0110 &&& x0111) = x011) (x0101 : BitVec 1) (x0100 : BitVec 1) (_ : (x0100 &&& x0101) = x010) (x001 : BitVec 1) (x000 : BitVec 1) (_ : (x000 &&& x001) = x00) (x0011 : BitVec 1) (x0010 : BitVec 1) (_ : (x0010 &&& x0011) = x001) (x0001 : BitVec 1) (x0000 : BitVec 1) (_ : (x0000 &&& x0001) = x000) : x0000 = 1#1 := by bv_decide (config := { embeddedConstraintSubst := false, andFlattening := false})
example (_ : x = 1#1) (x1 : BitVec 1) (x0 : BitVec 1) (_ : (x0 &&& x1) = x) (x11 : BitVec 1) (x10 : BitVec 1) (_ : (x10 &&& x11) = x1) (x111 : BitVec 1) (x110 : BitVec 1) (_ : (x110 &&& x111) = x11) (x1111 : BitVec 1) (x1110 : BitVec 1) (_ : (x1110 &&& x1111) = x111) (x11111 : BitVec 1) (x11110 : BitVec 1) (_ : (x11110 &&& x11111) = x1111) (x11101 : BitVec 1) (x11100 : BitVec 1) (_ : (x11100 &&& x11101) = x1110) (x1101 : BitVec 1) (x1100 : BitVec 1) (_ : (x1100 &&& x1101) = x110) (x11011 : BitVec 1) (x11010 : BitVec 1) (_ : (x11010 &&& x11011) = x1101) (x11001 : BitVec 1) (x11000 : BitVec 1) (_ : (x11000 &&& x11001) = x1100) (x101 : BitVec 1) (x100 : BitVec 1) (_ : (x100 &&& x101) = x10) (x1011 : BitVec 1) (x1010 : BitVec 1) (_ : (x1010 &&& x1011) = x101) (x10111 : BitVec 1) (x10110 : BitVec 1) (_ : (x10110 &&& x10111) = x1011) (x10101 : BitVec 1) (x10100 : BitVec 1) (_ : (x10100 &&& x10101) = x1010) (x1001 : BitVec 1) (x1000 : BitVec 1) (_ : (x1000 &&& x1001) = x100) (x10011 : BitVec 1) (x10010 : BitVec 1) (_ : (x10010 &&& x10011) = x1001) (x10001 : BitVec 1) (x10000 : BitVec 1) (_ : (x10000 &&& x10001) = x1000) (x01 : BitVec 1) (x00 : BitVec 1) (_ : (x00 &&& x01) = x0) (x011 : BitVec 1) (x010 : BitVec 1) (_ : (x010 &&& x011) = x01) (x0111 : BitVec 1) (x0110 : BitVec 1) (_ : (x0110 &&& x0111) = x011) (x01111 : BitVec 1) (x01110 : BitVec 1) (_ : (x01110 &&& x01111) = x0111) (x01101 : BitVec 1) (x01100 : BitVec 1) (_ : (x01100 &&& x01101) = x0110) (x0101 : BitVec 1) (x0100 : BitVec 1) (_ : (x0100 &&& x0101) = x010) (x01011 : BitVec 1) (x01010 : BitVec 1) (_ : (x01010 &&& x01011) = x0101) (x01001 : BitVec 1) (x01000 : BitVec 1) (_ : (x01000 &&& x01001) = x0100) (x001 : BitVec 1) (x000 : BitVec 1) (_ : (x000 &&& x001) = x00) (x0011 : BitVec 1) (x0010 : BitVec 1) (_ : (x0010 &&& x0011) = x001) (x00111 : BitVec 1) (x00110 : BitVec 1) (_ : (x00110 &&& x00111) = x0011) (x00101 : BitVec 1) (x00100 : BitVec 1) (_ : (x00100 &&& x00101) = x0010) (x0001 : BitVec 1) (x0000 : BitVec 1) (_ : (x0000 &&& x0001) = x000) (x00011 : BitVec 1) (x00010 : BitVec 1) (_ : (x00010 &&& x00011) = x0001) (x00001 : BitVec 1) (x00000 : BitVec 1) (_ : (x00000 &&& x00001) = x0000) : x00000 = 1#1 := by bv_decide (config := { embeddedConstraintSubst := false, andFlattening := false})
example (_ : x = 1#1) (x1 : BitVec 1) (x0 : BitVec 1) (_ : (x0 &&& x1) = x) (x11 : BitVec 1) (x10 : BitVec 1) (_ : (x10 &&& x11) = x1) (x111 : BitVec 1) (x110 : BitVec 1) (_ : (x110 &&& x111) = x11) (x1111 : BitVec 1) (x1110 : BitVec 1) (_ : (x1110 &&& x1111) = x111) (x11111 : BitVec 1) (x11110 : BitVec 1) (_ : (x11110 &&& x11111) = x1111) (x111111 : BitVec 1) (x111110 : BitVec 1) (_ : (x111110 &&& x111111) = x11111) (x111101 : BitVec 1) (x111100 : BitVec 1) (_ : (x111100 &&& x111101) = x11110) (x11101 : BitVec 1) (x11100 : BitVec 1) (_ : (x11100 &&& x11101) = x1110) (x111011 : BitVec 1) (x111010 : BitVec 1) (_ : (x111010 &&& x111011) = x11101) (x111001 : BitVec 1) (x111000 : BitVec 1) (_ : (x111000 &&& x111001) = x11100) (x1101 : BitVec 1) (x1100 : BitVec 1) (_ : (x1100 &&& x1101) = x110) (x11011 : BitVec 1) (x11010 : BitVec 1) (_ : (x11010 &&& x11011) = x1101) (x110111 : BitVec 1) (x110110 : BitVec 1) (_ : (x110110 &&& x110111) = x11011) (x110101 : BitVec 1) (x110100 : BitVec 1) (_ : (x110100 &&& x110101) = x11010) (x11001 : BitVec 1) (x11000 : BitVec 1) (_ : (x11000 &&& x11001) = x1100) (x110011 : BitVec 1) (x110010 : BitVec 1) (_ : (x110010 &&& x110011) = x11001) (x110001 : BitVec 1) (x110000 : BitVec 1) (_ : (x110000 &&& x110001) = x11000) (x101 : BitVec 1) (x100 : BitVec 1) (_ : (x100 &&& x101) = x10) (x1011 : BitVec 1) (x1010 : BitVec 1) (_ : (x1010 &&& x1011) = x101) (x10111 : BitVec 1) (x10110 : BitVec 1) (_ : (x10110 &&& x10111) = x1011) (x101111 : BitVec 1) (x101110 : BitVec 1) (_ : (x101110 &&& x101111) = x10111) (x101101 : BitVec 1) (x101100 : BitVec 1) (_ : (x101100 &&& x101101) = x10110) (x10101 : BitVec 1) (x10100 : BitVec 1) (_ : (x10100 &&& x10101) = x1010) (x101011 : BitVec 1) (x101010 : BitVec 1) (_ : (x101010 &&& x101011) = x10101) (x101001 : BitVec 1) (x101000 : BitVec 1) (_ : (x101000 &&& x101001) = x10100) (x1001 : BitVec 1) (x1000 : BitVec 1) (_ : (x1000 &&& x1001) = x100) (x10011 : BitVec 1) (x10010 : BitVec 1) (_ : (x10010 &&& x10011) = x1001) (x100111 : BitVec 1) (x100110 : BitVec 1) (_ : (x100110 &&& x100111) = x10011) (x100101 : BitVec 1) (x100100 : BitVec 1) (_ : (x100100 &&& x100101) = x10010) (x10001 : BitVec 1) (x10000 : BitVec 1) (_ : (x10000 &&& x10001) = x1000) (x100011 : BitVec 1) (x100010 : BitVec 1) (_ : (x100010 &&& x100011) = x10001) (x100001 : BitVec 1) (x100000 : BitVec 1) (_ : (x100000 &&& x100001) = x10000) (x01 : BitVec 1) (x00 : BitVec 1) (_ : (x00 &&& x01) = x0) (x011 : BitVec 1) (x010 : BitVec 1) (_ : (x010 &&& x011) = x01) (x0111 : BitVec 1) (x0110 : BitVec 1) (_ : (x0110 &&& x0111) = x011) (x01111 : BitVec 1) (x01110 : BitVec 1) (_ : (x01110 &&& x01111) = x0111) (x011111 : BitVec 1) (x011110 : BitVec 1) (_ : (x011110 &&& x011111) = x01111) (x011101 : BitVec 1) (x011100 : BitVec 1) (_ : (x011100 &&& x011101) = x01110) (x01101 : BitVec 1) (x01100 : BitVec 1) (_ : (x01100 &&& x01101) = x0110) (x011011 : BitVec 1) (x011010 : BitVec 1) (_ : (x011010 &&& x011011) = x01101) (x011001 : BitVec 1) (x011000 : BitVec 1) (_ : (x011000 &&& x011001) = x01100) (x0101 : BitVec 1) (x0100 : BitVec 1) (_ : (x0100 &&& x0101) = x010) (x01011 : BitVec 1) (x01010 : BitVec 1) (_ : (x01010 &&& x01011) = x0101) (x010111 : BitVec 1) (x010110 : BitVec 1) (_ : (x010110 &&& x010111) = x01011) (x010101 : BitVec 1) (x010100 : BitVec 1) (_ : (x010100 &&& x010101) = x01010) (x01001 : BitVec 1) (x01000 : BitVec 1) (_ : (x01000 &&& x01001) = x0100) (x010011 : BitVec 1) (x010010 : BitVec 1) (_ : (x010010 &&& x010011) = x01001) (x010001 : BitVec 1) (x010000 : BitVec 1) (_ : (x010000 &&& x010001) = x01000) (x001 : BitVec 1) (x000 : BitVec 1) (_ : (x000 &&& x001) = x00) (x0011 : BitVec 1) (x0010 : BitVec 1) (_ : (x0010 &&& x0011) = x001) (x00111 : BitVec 1) (x00110 : BitVec 1) (_ : (x00110 &&& x00111) = x0011) (x001111 : BitVec 1) (x001110 : BitVec 1) (_ : (x001110 &&& x001111) = x00111) (x001101 : BitVec 1) (x001100 : BitVec 1) (_ : (x001100 &&& x001101) = x00110) (x00101 : BitVec 1) (x00100 : BitVec 1) (_ : (x00100 &&& x00101) = x0010) (x001011 : BitVec 1) (x001010 : BitVec 1) (_ : (x001010 &&& x001011) = x00101) (x001001 : BitVec 1) (x001000 : BitVec 1) (_ : (x001000 &&& x001001) = x00100) (x0001 : BitVec 1) (x0000 : BitVec 1) (_ : (x0000 &&& x0001) = x000) (x00011 : BitVec 1) (x00010 : BitVec 1) (_ : (x00010 &&& x00011) = x0001) (x000111 : BitVec 1) (x000110 : BitVec 1) (_ : (x000110 &&& x000111) = x00011) (x000101 : BitVec 1) (x000100 : BitVec 1) (_ : (x000100 &&& x000101) = x00010) (x00001 : BitVec 1) (x00000 : BitVec 1) (_ : (x00000 &&& x00001) = x0000) (x000011 : BitVec 1) (x000010 : BitVec 1) (_ : (x000010 &&& x000011) = x00001) (x000001 : BitVec 1) (x000000 : BitVec 1) (_ : (x000000 &&& x000001) = x00000) : x000000 = 1#1 := by bv_decide (config := { embeddedConstraintSubst := false, andFlattening := false})
