This module contains the BitVec simplifying part of the bv_normalize simp set.
@[deprecated Std.Tactic.BVDecide.Normalize.BitVec.ofBool_eq_ite (since := "2026-07-21")]
theorem Std.Tactic.BVDecide.Normalize.BitVec.carry_eq_ite_le_lt {w : Nat} (i : Nat) (x y : BitVec w) (c : Bool) :
BitVec.carry i x y c = bif c then (~~~BitVec.setWidth i x).ule (BitVec.setWidth i y) else (~~~BitVec.setWidth i x).ult (BitVec.setWidth i y)
theorem Std.Tactic.BVDecide.Normalize.BitVec.extractLsb'_ite {w : Nat} {c : Bool} {x y : BitVec w} (s l : Nat) :
BitVec.extractLsb' s l (bif c then x else y) = bif c then BitVec.extractLsb' s l x else BitVec.extractLsb' s l y
theorem Std.Tactic.BVDecide.Normalize.BitVec.extractLsb'_eq_setWidth_ushiftRight {w : Nat} (x : BitVec w) (s l : Nat) :
Used in the extractLsb' simproc to reduce extraction at a symbolic offset to a shift.
@[deprecated Std.Tactic.BVDecide.Normalize.BitVec.extractLsb'_ite (since := "2026-07-21")]
theorem Std.Tactic.BVDecide.Normalize.BitVec.extractLsb'_if {w : Nat} {c : Bool} {x y : BitVec w} (s l : Nat) :
BitVec.extractLsb' s l (bif c then x else y) = bif c then BitVec.extractLsb' s l x else BitVec.extractLsb' s l y
theorem Std.Tactic.BVDecide.Normalize.BitVec.const_add_beq_const {w b : Nat} {a : BitVec w} {c : Nat} :
theorem Std.Tactic.BVDecide.Normalize.BitVec.const_beq_add_const_beq {w c : Nat} {a : BitVec w} {b : Nat} :
theorem Std.Tactic.BVDecide.Normalize.BitVec.append_const_left {w3 w1 a w2 b : Nat} {c : BitVec w3} :
BitVec.ofNat w1 a ++ (BitVec.ofNat w2 b ++ c) = BitVec.cast ⋯ (BitVec.ofNat w1 a ++ BitVec.ofNat w2 b ++ c)
theorem Std.Tactic.BVDecide.Normalize.BitVec.append_const_right {w1 w2 b w3 c : Nat} {a : BitVec w1} :
a ++ BitVec.ofNat w2 b ++ BitVec.ofNat w3 c = BitVec.cast ⋯ (a ++ (BitVec.ofNat w2 b ++ BitVec.ofNat w3 c))
theorem Std.Tactic.BVDecide.Normalize.BitVec.signExtend_elim' {v : Nat} {x : BitVec v} {w : Nat} (h : w ≤ v) :