Documentation

Mathlib.Data.BitVec.Lemmas

Basic Theorems About Bitvectors #

This file contains theorems about bitvectors.

theorem Std.BitVec.toFin_inj {w : } {x : Std.BitVec w} {y : Std.BitVec w} :
x.toFin = y.toFin x = y

x < y as natural numbers if and only if x < y as BitVec w.

theorem Std.BitVec.toNat_ofNat_of_lt {w : } {m : } (h : m < 2 ^ w) :
@[simp]
theorem Std.BitVec.extractLsb_eq {w : } (hi : ) (lo : ) (a : Std.BitVec w) :
theorem Std.BitVec.ofFin_val {n : } (i : Fin (2 ^ n)) :
Std.BitVec.toNat { toFin := i } = i
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.ofNat_toNat_of_eq {w : } {v : } (x : Std.BitVec w) (h : w = v) :
theorem Std.BitVec.toFin_val {n : } (v : Std.BitVec n) :
v.toFin = Std.BitVec.toNat v
theorem Std.BitVec.toFin_le_toFin_of_le {n : } {v₀ : Std.BitVec n} {v₁ : Std.BitVec n} (h : v₀ v₁) :
v₀.toFin v₁.toFin
theorem Std.BitVec.ofFin_le_ofFin_of_le {n : } {i : Fin (2 ^ n)} {j : Fin (2 ^ n)} (h : i j) :
{ toFin := i } { toFin := j }
theorem Std.BitVec.toFin_ofFin {n : } (i : Fin (2 ^ n)) :
{ toFin := i }.toFin = i
theorem Std.BitVec.ofFin_toFin {n : } (v : Std.BitVec n) :
{ toFin := v.toFin } = v

Distributivity of Std.BitVec.ofFin #

@[simp]
theorem Std.BitVec.ofFin_neg {w : } (x : Fin (2 ^ w)) :
{ toFin := -x } = -{ toFin := x }
@[simp]
theorem Std.BitVec.ofFin_and {w : } (x : Fin (2 ^ w)) (y : Fin (2 ^ w)) :
{ toFin := x &&& y } = { toFin := x } &&& { toFin := y }
@[simp]
theorem Std.BitVec.ofFin_or {w : } (x : Fin (2 ^ w)) (y : Fin (2 ^ w)) :
{ toFin := x ||| y } = { toFin := x } ||| { toFin := y }
@[simp]
theorem Std.BitVec.ofFin_xor {w : } (x : Fin (2 ^ w)) (y : Fin (2 ^ w)) :
{ toFin := x ^^^ y } = { toFin := x } ^^^ { toFin := y }
@[simp]
theorem Std.BitVec.ofFin_mul {w : } (x : Fin (2 ^ w)) (y : Fin (2 ^ w)) :
{ toFin := x * y } = { toFin := x } * { toFin := y }
theorem Std.BitVec.ofFin_zero {w : } :
{ toFin := 0 } = 0
theorem Std.BitVec.ofFin_one {w : } :
{ toFin := 1 } = 1
theorem Std.BitVec.ofFin_nsmul {w : } (n : ) (x : Fin (2 ^ w)) :
{ toFin := n x } = n { toFin := x }
theorem Std.BitVec.ofFin_zsmul {w : } (z : ) (x : Fin (2 ^ w)) :
{ toFin := z x } = z { toFin := x }
@[simp]
theorem Std.BitVec.ofFin_pow {w : } (x : Fin (2 ^ w)) (n : ) :
{ toFin := x ^ n } = { toFin := x } ^ n
@[simp]
theorem Std.BitVec.ofFin_natCast {w : } (n : ) :
{ toFin := n } = n
@[simp]
theorem Std.BitVec.ofFin_ofNat {w : } (n : ) :
{ toFin := OfNat.ofNat n } = OfNat.ofNat n

Distributivity of Std.BitVec.toFin #

@[simp]
theorem Std.BitVec.toFin_neg {w : } (x : Std.BitVec w) :
(-x).toFin = -x.toFin
@[simp]
theorem Std.BitVec.toFin_and {w : } (x : Std.BitVec w) (y : Std.BitVec w) :
(x &&& y).toFin = x.toFin &&& y.toFin
@[simp]
theorem Std.BitVec.toFin_or {w : } (x : Std.BitVec w) (y : Std.BitVec w) :
(x ||| y).toFin = x.toFin ||| y.toFin
@[simp]
theorem Std.BitVec.toFin_xor {w : } (x : Std.BitVec w) (y : Std.BitVec w) :
(x ^^^ y).toFin = x.toFin ^^^ y.toFin
@[simp]
theorem Std.BitVec.toFin_add {w : } (x : Std.BitVec w) (y : Std.BitVec w) :
(x + y).toFin = x.toFin + y.toFin
@[simp]
theorem Std.BitVec.toFin_sub {w : } (x : Std.BitVec w) (y : Std.BitVec w) :
(x - y).toFin = x.toFin - y.toFin
@[simp]
theorem Std.BitVec.toFin_mul {w : } (x : Std.BitVec w) (y : Std.BitVec w) :
(x * y).toFin = x.toFin * y.toFin
theorem Std.BitVec.toFin_zero {w : } :
0.toFin = 0
theorem Std.BitVec.toFin_one {w : } :
1.toFin = 1
theorem Std.BitVec.toFin_nsmul {w : } (n : ) (x : Std.BitVec w) :
(n x).toFin = n x.toFin
theorem Std.BitVec.toFin_zsmul {w : } (z : ) (x : Std.BitVec w) :
(z x).toFin = z x.toFin
@[simp]
theorem Std.BitVec.toFin_pow {w : } (x : Std.BitVec w) (n : ) :
(x ^ n).toFin = x.toFin ^ n
@[simp]
theorem Std.BitVec.toFin_natCast {w : } (n : ) :
(n).toFin = n
theorem Std.BitVec.toFin_ofNat {w : } (n : ) :

IntCast #

Ring #

Equations
  • One or more equations did not get rendered due to their size.