theorem
bv_AddSub_1164
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.add (LLVM.sub (LLVM.const? 0) e_1) e ⊑ LLVM.sub e e_1
theorem
bv_AddSub_1165
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.add (LLVM.sub (LLVM.const? 0) e_1) (LLVM.sub (LLVM.const? 0) e) ⊑ LLVM.sub (LLVM.const? 0) (LLVM.add e_1 e)
theorem
bv_AddSub_1176
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.add e_1 (LLVM.sub (LLVM.const? 0) e) ⊑ LLVM.sub e_1 e
theorem
bv_AddSub_1202
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.add (LLVM.xor e_1 (LLVM.const? (-1))) e ⊑ LLVM.sub (LLVM.sub e (LLVM.const? 1)) e_1
theorem
bv_AddSub_1539
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.sub e_1 (LLVM.sub (LLVM.const? 0) e) ⊑ LLVM.add e_1 e
theorem
bv_AddSub_1560
{w : ℕ}
(e : LLVM.IntW w)
:
LLVM.sub (LLVM.const? (-1)) e ⊑ LLVM.xor e (LLVM.const? (-1))
theorem
bv_AddSub_1564
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.sub e_1 (LLVM.xor e (LLVM.const? (-1))) ⊑ LLVM.add e (LLVM.add e_1 (LLVM.const? 1))
theorem
bv_AddSub_1614
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.sub e_1 (LLVM.add e_1 e) ⊑ LLVM.sub (LLVM.const? 0) e
theorem
bv_AddSub_1619
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.sub (LLVM.sub e_1 e) e_1 ⊑ LLVM.sub (LLVM.const? 0) e
theorem
bv_AndOrXor_698
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
(e_2 : LLVM.IntW w)
:
LLVM.and (LLVM.icmp LLVM.IntPredicate.eq (LLVM.and e_2 e_1) (LLVM.const? 0))
(LLVM.icmp LLVM.IntPredicate.eq (LLVM.and e_2 e) (LLVM.const? 0)) ⊑ LLVM.icmp LLVM.IntPredicate.eq (LLVM.and e_2 (LLVM.or e_1 e)) (LLVM.const? 0)
theorem
bv_AndOrXor_709
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
(e_2 : LLVM.IntW w)
:
LLVM.and (LLVM.icmp LLVM.IntPredicate.eq (LLVM.and e_2 e_1) e_1) (LLVM.icmp LLVM.IntPredicate.eq (LLVM.and e_2 e) e) ⊑ LLVM.icmp LLVM.IntPredicate.eq (LLVM.and e_2 (LLVM.or e_1 e)) (LLVM.or e_1 e)
theorem
bv_AndOrXor_716
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
(e_2 : LLVM.IntW w)
:
LLVM.and (LLVM.icmp LLVM.IntPredicate.eq (LLVM.and e_2 e_1) e_2) (LLVM.icmp LLVM.IntPredicate.eq (LLVM.and e_2 e) e_2) ⊑ LLVM.icmp LLVM.IntPredicate.eq (LLVM.and e_2 (LLVM.and e_1 e)) e_2
theorem
bv_AndOrXor_794
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.and (LLVM.icmp LLVM.IntPredicate.sgt e_1 e) (LLVM.icmp LLVM.IntPredicate.ne e_1 e) ⊑ LLVM.icmp LLVM.IntPredicate.sgt e_1 e
theorem
bv_AndOrXor_827
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.and (LLVM.icmp LLVM.IntPredicate.eq e_1 (LLVM.const? 0)) (LLVM.icmp LLVM.IntPredicate.eq e (LLVM.const? 0)) ⊑ LLVM.icmp LLVM.IntPredicate.eq (LLVM.or e_1 e) (LLVM.const? 0)
theorem
bv_AndOrXor_887_2
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.and (LLVM.icmp LLVM.IntPredicate.eq e_1 e) (LLVM.icmp LLVM.IntPredicate.ne e_1 e) ⊑ LLVM.const? 0
theorem
bv_AndOrXor_1230__A__B___A__B
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.and (LLVM.xor e_1 (LLVM.const? (-1))) (LLVM.xor e (LLVM.const? (-1))) ⊑ LLVM.xor (LLVM.or e_1 e) (LLVM.const? (-1))
theorem
bv_AndOrXor_1683_1
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or (LLVM.icmp LLVM.IntPredicate.ugt e_1 e) (LLVM.icmp LLVM.IntPredicate.eq e_1 e) ⊑ LLVM.icmp LLVM.IntPredicate.uge e_1 e
theorem
bv_AndOrXor_1683_2
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or (LLVM.icmp LLVM.IntPredicate.uge e_1 e) (LLVM.icmp LLVM.IntPredicate.ne e_1 e) ⊑ LLVM.const? 1
theorem
bv_AndOrXor_1704
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or (LLVM.icmp LLVM.IntPredicate.eq e_1 (LLVM.const? 0)) (LLVM.icmp LLVM.IntPredicate.ult e e_1) ⊑ LLVM.icmp LLVM.IntPredicate.uge (LLVM.add e_1 (LLVM.const? (-1))) e
theorem
bv_AndOrXor_1705
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or (LLVM.icmp LLVM.IntPredicate.eq e_1 (LLVM.const? 0)) (LLVM.icmp LLVM.IntPredicate.ugt e_1 e) ⊑ LLVM.icmp LLVM.IntPredicate.uge (LLVM.add e_1 (LLVM.const? (-1))) e
theorem
bv_AndOrXor_1733
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or (LLVM.icmp LLVM.IntPredicate.ne e_1 (LLVM.const? 0)) (LLVM.icmp LLVM.IntPredicate.ne e (LLVM.const? 0)) ⊑ LLVM.icmp LLVM.IntPredicate.ne (LLVM.or e_1 e) (LLVM.const? 0)
theorem
bv_AndOrXor_2118___A__B__A___A__B
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or (LLVM.and e_1 e) (LLVM.xor e_1 (LLVM.const? (-1))) ⊑ LLVM.or (LLVM.xor e_1 (LLVM.const? (-1))) e
theorem
bv_AndOrXor_2188
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or (LLVM.and e_1 (LLVM.xor e (LLVM.const? (-1)))) (LLVM.and (LLVM.xor e_1 (LLVM.const? (-1))) e) ⊑ LLVM.xor e_1 e
theorem
bv_AndOrXor_2247__A__B__A__B
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or (LLVM.xor e_1 (LLVM.const? (-1))) (LLVM.xor e (LLVM.const? (-1))) ⊑ LLVM.xor (LLVM.and e_1 e) (LLVM.const? (-1))
theorem
bv_AndOrXor_2264
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or e_1 (LLVM.xor (LLVM.xor e_1 (LLVM.const? (-1))) e) ⊑ LLVM.or e_1 (LLVM.xor e (LLVM.const? (-1)))
theorem
bv_AndOrXor_2284
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or e_1 (LLVM.xor (LLVM.or e_1 e) (LLVM.const? (-1))) ⊑ LLVM.or e_1 (LLVM.xor e (LLVM.const? (-1)))
theorem
bv_AndOrXor_2285
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or e_1 (LLVM.xor (LLVM.xor e_1 e) (LLVM.const? (-1))) ⊑ LLVM.or e_1 (LLVM.xor e (LLVM.const? (-1)))
theorem
bv_AndOrXor_2297
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.or (LLVM.and e_1 e) (LLVM.xor (LLVM.xor e_1 (LLVM.const? (-1))) e) ⊑ LLVM.xor (LLVM.xor e_1 (LLVM.const? (-1))) e
theorem
bv_AndOrXor_2416
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.and (LLVM.xor e_1 (LLVM.const? (-1))) e) (LLVM.const? (-1)) ⊑ LLVM.or e_1 (LLVM.xor e (LLVM.const? (-1)))
theorem
bv_AndOrXor_2417
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.or (LLVM.xor e_1 (LLVM.const? (-1))) e) (LLVM.const? (-1)) ⊑ LLVM.and e_1 (LLVM.xor e (LLVM.const? (-1)))
theorem
bv_AndOrXor_2429
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.and e_1 e) (LLVM.const? (-1)) ⊑ LLVM.or (LLVM.xor e_1 (LLVM.const? (-1))) (LLVM.xor e (LLVM.const? (-1)))
theorem
bv_AndOrXor_2430
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.or e_1 e) (LLVM.const? (-1)) ⊑ LLVM.and (LLVM.xor e_1 (LLVM.const? (-1))) (LLVM.xor e (LLVM.const? (-1)))
theorem
bv_AndOrXor_2443
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.ashr (LLVM.xor e_1 (LLVM.const? (-1))) e) (LLVM.const? (-1)) ⊑ LLVM.ashr e_1 e
theorem
bv_AndOrXor_2453
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.icmp LLVM.IntPredicate.slt e_1 e) (LLVM.const? (-1)) ⊑ LLVM.icmp LLVM.IntPredicate.sge e_1 e
theorem
bv_AndOrXor_2475
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.sub e_1 e) (LLVM.const? (-1)) ⊑ LLVM.add e (LLVM.sub (LLVM.const? (-1)) e_1)
theorem
bv_AndOrXor_2486
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.add e_1 e) (LLVM.const? (-1)) ⊑ LLVM.sub (LLVM.sub (LLVM.const? (-1)) e) e_1
theorem
bv_AndOrXor_2607
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.or e_1 (LLVM.xor e (LLVM.const? (-1)))) (LLVM.or (LLVM.xor e_1 (LLVM.const? (-1))) e) ⊑ LLVM.xor e_1 e
theorem
bv_AndOrXor_2617
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.and e_1 (LLVM.xor e (LLVM.const? (-1)))) (LLVM.and (LLVM.xor e_1 (LLVM.const? (-1))) e) ⊑ LLVM.xor e_1 e
theorem
bv_AndOrXor_2658
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.and e_1 (LLVM.xor e (LLVM.const? (-1)))) (LLVM.xor e_1 (LLVM.const? (-1))) ⊑ LLVM.xor (LLVM.and e_1 e) (LLVM.const? (-1))
theorem
bv_AndOrXor_2663
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.xor (LLVM.icmp LLVM.IntPredicate.ule e_1 e) (LLVM.icmp LLVM.IntPredicate.ne e_1 e) ⊑ LLVM.icmp LLVM.IntPredicate.uge e_1 e
theorem
bv_152
{w : ℕ}
(e : LLVM.IntW w)
:
LLVM.mul e (LLVM.const? (-1)) ⊑ LLVM.sub (LLVM.const? 0) e
theorem
bv_290__292
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.mul (LLVM.shl (LLVM.const? 1) e_1) e ⊑ LLVM.shl e e_1
theorem
bv_1030
{w : ℕ}
(e : LLVM.IntW w)
:
LLVM.sdiv e (LLVM.const? (-1)) ⊑ LLVM.sub (LLVM.const? 0) e
theorem
bv_Select_858
(e : LLVM.IntW 1)
(e_1 : LLVM.IntW 1)
:
LLVM.select e_1 (LLVM.xor e_1 (LLVM.const? (-1))) e ⊑ LLVM.and (LLVM.xor e_1 (LLVM.const? (-1))) e
theorem
bv_Select_859'
(e : LLVM.IntW 1)
(e_1 : LLVM.IntW 1)
:
LLVM.select e_1 e (LLVM.xor e_1 (LLVM.const? (-1))) ⊑ LLVM.or (LLVM.xor e_1 (LLVM.const? (-1))) e
theorem
bv_select_1100
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.select (LLVM.const? 1) e_1 e ⊑ e_1
theorem
bv_Select_1105
{w : ℕ}
(e : LLVM.IntW w)
(e_1 : LLVM.IntW w)
:
LLVM.select (LLVM.const? 0) e_1 e ⊑ e