Theorem: UInt.mul_add (Algdata/Classes/UInt.lean)

State before:
α : Type
inst✝¹ : (n : Nat) → OfNat α n
inst✝ : UInt α
a b c : α
⊢ a * (b + c) = a * b + a * c
Tactic:
apply toNat_inj
State after:
case a
α : Type
inst✝¹ : (n : Nat) → OfNat α n
inst✝ : UInt α
a b c : α
⊢ toNat (a * (b + c)) = toNat (a * b + a * c)

State before:
case a
α : Type
inst✝¹ : (n : Nat) → OfNat α n
inst✝ : UInt α
a b c : α
⊢ toNat (a * (b + c)) = toNat (a * b + a * c)
Tactic:
simp [toNat_add, toNat_mul]
State after:
case a
α : Type
inst✝¹ : (n : Nat) → OfNat α n
inst✝ : UInt α
a b c : α
⊢ toNat a * ((toNat b + toNat c) % 2 ^ length α) % 2 ^ length α = (toNat a * toNat b + toNat a * toNat c) % 2 ^ length α

State before:
case a
α : Type
inst✝¹ : (n : Nat) → OfNat α n
inst✝ : UInt α
a b c : α
⊢ toNat a * ((toNat b + toNat c) % 2 ^ length α) % 2 ^ length α = (toNat a * toNat b + toNat a * toNat c) % 2 ^ length α
Tactic:
conv => lhs; rw [Nat.mul_comm, Nat.mod_mul_mod, Nat.mul_comm, Nat.mul_add]
State after:
no goals