Basic Theorems About Bitvectors #
This file contains theorems about bitvectors.
theorem
Std.BitVec.toNat_inj
{w : ℕ}
{x : Std.BitVec w}
{y : Std.BitVec w}
:
Std.BitVec.toNat x = Std.BitVec.toNat y ↔ x = y
theorem
Std.BitVec.toNat_lt_toNat
{w : ℕ}
{x : Std.BitVec w}
{y : Std.BitVec w}
:
Std.BitVec.toNat x < Std.BitVec.toNat y ↔ x < y
x < y
as natural numbers if and only if x < y
as BitVec w
.
@[simp]
theorem
Std.BitVec.extractLsb_eq
{w : ℕ}
(hi : ℕ)
(lo : ℕ)
(a : Std.BitVec w)
:
Std.BitVec.extractLsb hi lo a = Std.BitVec.extractLsb' lo (hi - lo + 1) a
theorem
Std.BitVec.toNat_extractLsb'
{w : ℕ}
{i : ℕ}
{j : ℕ}
{x : Std.BitVec w}
:
Std.BitVec.toNat (Std.BitVec.extractLsb' i j x) = Std.BitVec.toNat x / 2 ^ i % 2 ^ j
theorem
Std.BitVec.addLsb_eq_twice_add_one
{x : ℕ}
{b : Bool}
:
Std.BitVec.addLsb x b = 2 * x + bif b then 1 else 0
theorem
Std.BitVec.decide_addLsb_mod_two
{x : ℕ}
{b : Bool}
:
decide (Std.BitVec.addLsb x b % 2 = 1) = b
theorem
Std.BitVec.ofNat_toNat_of_eq
{w : ℕ}
{v : ℕ}
(x : Std.BitVec w)
(h : w = v)
:
(Std.BitVec.toNat x)#v = Std.BitVec.cast h x
theorem
Std.BitVec.toFin_le_toFin_of_le
{n : ℕ}
{v₀ : Std.BitVec n}
{v₁ : Std.BitVec n}
(h : v₀ ≤ v₁)
:
v₀.toFin ≤ v₁.toFin
Distributivity of Std.BitVec.ofFin
#
@[simp]
Distributivity of Std.BitVec.toFin
#
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
@[simp]
Ring #
Equations
- One or more equations did not get rendered due to their size.