case zero
n✝ n : ℕ
⊢ Bitvec.toNat (Bitvec.ofNat zero n) = n % 2 ^ zero

case succ
n✝ k : ℕ
ih : ∀ {n : ℕ}, Bitvec.toNat (Bitvec.ofNat k n) = n % 2 ^ k
n : ℕ
⊢ Bitvec.toNat (Bitvec.ofNat (succ k) n) = n % 2 ^ succ k
k n : ℕ
⊢ Bitvec.toNat (Bitvec.ofNat k n) = n % 2 ^ k
induction' k with k ih generalizing n
case zero
n✝ n : ℕ
⊢ Bitvec.toNat (Bitvec.ofNat 0 n) = 0
case zero
n✝ n : ℕ
⊢ Bitvec.toNat (Bitvec.ofNat zero n) = n % 2 ^ zero
simp [Nat.mod_one]
no goals
case zero
n✝ n : ℕ
⊢ Bitvec.toNat (Bitvec.ofNat 0 n) = 0
rfl
no goals
case succ
n✝ k : ℕ
ih : ∀ {n : ℕ}, Bitvec.toNat (Bitvec.ofNat k n) = n % 2 ^ k
n : ℕ
⊢ Bitvec.toNat (Bitvec.ofNat (succ k) n) = n % 2 ^ succ k
rw [ofNat_succ, toNat_append, ih, bits_toNat_decide, mod_pow_succ, Nat.mul_comm]