Theorem: GroupRing.mul_monom_dist (UnitConjecture/GroupRing.lean)

State before:
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
b : R
h x₀ : G
s₁ s₂ : FormalSum R G
⊢ coords (mulMonom b h (s₁ ++ s₂)) x₀ = coords (mulMonom b h s₁) x₀ + coords (mulMonom b h s₂) x₀
Tactic:
induction s₁ with
| nil => 
  simp [mulMonom, coords]
| cons head tail ih =>
  simp [mulMonom, coords]
  rw [ih]
  simp [add_assoc]
State after:
no goals

State before:
case nil
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
b : R
h x₀ : G
s₂ : FormalSum R G
⊢ coords (mulMonom b h ([] ++ s₂)) x₀ = coords (mulMonom b h []) x₀ + coords (mulMonom b h s₂) x₀
Tactic:
simp [mulMonom, coords]
State after:
no goals

State before:
case cons
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
b : R
h x₀ : G
s₂ : FormalSum R G
head : R × G
tail : List (R × G)
ih : coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀
⊢ coords (mulMonom b h (head :: tail ++ s₂)) x₀ = coords (mulMonom b h (head :: tail)) x₀ + coords (mulMonom b h s₂) x₀
Tactic:
simp [mulMonom, coords]
State after:
case cons
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
b : R
h x₀ : G
s₂ : FormalSum R G
head : R × G
tail : List (R × G)
ih : coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀
⊢ monomCoeff R G x₀ (head.1 * b, head.2 * h) + coords (mulMonom b h (tail ++ s₂)) x₀ =
    monomCoeff R G x₀ (head.1 * b, head.2 * h) + coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀

State before:
case cons
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
b : R
h x₀ : G
s₂ : FormalSum R G
head : R × G
tail : List (R × G)
ih : coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀
⊢ monomCoeff R G x₀ (head.1 * b, head.2 * h) + coords (mulMonom b h (tail ++ s₂)) x₀ =
    monomCoeff R G x₀ (head.1 * b, head.2 * h) + coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀
Tactic:
rw [ih]
State after:
case cons
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
b : R
h x₀ : G
s₂ : FormalSum R G
head : R × G
tail : List (R × G)
ih : coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀
⊢ monomCoeff R G x₀ (head.1 * b, head.2 * h) + (coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀) =
    monomCoeff R G x₀ (head.1 * b, head.2 * h) + coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀

State before:
case cons
R : Type
inst✝³ : Ring R
inst✝² : DecidableEq R
G : Type
inst✝¹ : Group G
inst✝ : DecidableEq G
b : R
h x₀ : G
s₂ : FormalSum R G
head : R × G
tail : List (R × G)
ih : coords (mulMonom b h (tail ++ s₂)) x₀ = coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀
⊢ monomCoeff R G x₀ (head.1 * b, head.2 * h) + (coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀) =
    monomCoeff R G x₀ (head.1 * b, head.2 * h) + coords (mulMonom b h tail) x₀ + coords (mulMonom b h s₂) x₀
Tactic:
simp [add_assoc]
State after:
no goals