-- Mathlib/RingTheory/HahnSeries/Multiplication.lean
theorem mul_smul' [Semiring R] [Module R V] (x y : HahnSeries Γ R)
    (z : HahnModule Γ' R V) : (x * y) • z = x • (y • z)

Proof state:
case h.h
Γ : Type u_1
Γ' : Type u_2
R : Type u_3
V : Type u_5
inst✝⁶ : OrderedCancelAddCommMonoid Γ
inst✝⁵ : PartialOrder Γ'
inst✝⁴ : AddAction Γ Γ'
inst✝³ : IsOrderedCancelVAdd Γ Γ'
inst✝² : AddCommMonoid V
inst✝¹ : Semiring R
inst✝ : Module R V
x y : HahnSeries Γ R
z : HahnModule Γ' R V
b : Γ'
⊢ ∑ x_1 ∈ (VAddAntidiagonal ⋯ ⋯ b).sigma fun a => addAntidiagonal ⋯ ⋯ a.1,
      (x.coeff x_1.snd.1 * y.coeff x_1.snd.2) • ((of R).symm z).coeff x_1.fst.2 =
    ∑ x_1 ∈ (VAddAntidiagonal ⋯ ⋯ b).sigma fun a => VAddAntidiagonal ⋯ ⋯ a.2,
      x.coeff x_1.fst.1 • y.coeff x_1.snd.1 • ((of R).symm z).coeff x_1.snd.2

Tactic:
apply Finset.sum_nbij' (fun ⟨⟨_i, j⟩, ⟨k, l⟩⟩ ↦ ⟨(k, l +ᵥ j), (l, j)⟩)
  (fun ⟨⟨i, _j⟩, ⟨k, l⟩⟩ ↦ ⟨(i + k, l), (i, k)⟩) <;>
  aesop (add safe [Set.vadd_mem_vadd, Set.add_mem_add]) (add simp [add_vadd, mul_smul])

Result:
no goals

Proof state:
Γ : Type u_1
Γ' : Type u_2
R : Type u_3
V : Type u_5
inst✝⁶ : OrderedCancelAddCommMonoid Γ
inst✝⁵ : PartialOrder Γ'
inst✝⁴ : AddAction Γ Γ'
inst✝³ : IsOrderedCancelVAdd Γ Γ'
inst✝² : AddCommMonoid V
inst✝¹ : Semiring R
inst✝ : Module R V
x y : HahnSeries Γ R
z : HahnModule Γ' R V
⊢ (x * y) • z = x • y • z

Tactic:
ext b

Result:
case h.h
Γ : Type u_1
Γ' : Type u_2
R : Type u_3
V : Type u_5
inst✝⁶ : OrderedCancelAddCommMonoid Γ
inst✝⁵ : PartialOrder Γ'
inst✝⁴ : AddAction Γ Γ'
inst✝³ : IsOrderedCancelVAdd Γ Γ'
inst✝² : AddCommMonoid V
inst✝¹ : Semiring R
inst✝ : Module R V
x y : HahnSeries Γ R
z : HahnModule Γ' R V
b : Γ'
⊢ ((of R).symm ((x * y) • z)).coeff b = ((of R).symm (x • y • z)).coeff b

Proof state:
case h.h
Γ : Type u_1
Γ' : Type u_2
R : Type u_3
V : Type u_5
inst✝⁶ : OrderedCancelAddCommMonoid Γ
inst✝⁵ : PartialOrder Γ'
inst✝⁴ : AddAction Γ Γ'
inst✝³ : IsOrderedCancelVAdd Γ Γ'
inst✝² : AddCommMonoid V
inst✝¹ : Semiring R
inst✝ : Module R V
x y : HahnSeries Γ R
z : HahnModule Γ' R V
b : Γ'
⊢ ∑ ij ∈ VAddAntidiagonal ⋯ ⋯ b, (x * y).coeff ij.1 • ((of R).symm z).coeff ij.2 =
    ∑ ij ∈ VAddAntidiagonal ⋯ ⋯ b, x.coeff ij.1 • ((of R).symm (y • z)).coeff ij.2

Tactic:
simp only [HahnSeries.coeff_mul, coeff_smul, HahnSeries.coeff_add, sum_smul, smul_sum, sum_sigma']

Result:
case h.h
Γ : Type u_1
Γ' : Type u_2
R : Type u_3
V : Type u_5
inst✝⁶ : OrderedCancelAddCommMonoid Γ
inst✝⁵ : PartialOrder Γ'
inst✝⁴ : AddAction Γ Γ'
inst✝³ : IsOrderedCancelVAdd Γ Γ'
inst✝² : AddCommMonoid V
inst✝¹ : Semiring R
inst✝ : Module R V
x y : HahnSeries Γ R
z : HahnModule Γ' R V
b : Γ'
⊢ ∑ x_1 ∈ (VAddAntidiagonal ⋯ ⋯ b).sigma fun a => addAntidiagonal ⋯ ⋯ a.1,
      (x.coeff x_1.snd.1 * y.coeff x_1.snd.2) • ((of R).symm z).coeff x_1.fst.2 =
    ∑ x_1 ∈ (VAddAntidiagonal ⋯ ⋯ b).sigma fun a => VAddAntidiagonal ⋯ ⋯ a.2,
      x.coeff x_1.fst.1 • y.coeff x_1.snd.1 • ((of R).symm z).coeff x_1.snd.2

Proof state:
case h.h
Γ : Type u_1
Γ' : Type u_2
R : Type u_3
V : Type u_5
inst✝⁶ : OrderedCancelAddCommMonoid Γ
inst✝⁵ : PartialOrder Γ'
inst✝⁴ : AddAction Γ Γ'
inst✝³ : IsOrderedCancelVAdd Γ Γ'
inst✝² : AddCommMonoid V
inst✝¹ : Semiring R
inst✝ : Module R V
x y : HahnSeries Γ R
z : HahnModule Γ' R V
b : Γ'
⊢ ((of R).symm ((x * y) • z)).coeff b = ((of R).symm (x • y • z)).coeff b

Tactic:
rw [coeff_smul_left (x.isPWO_support.add y.isPWO_support)
  HahnSeries.support_mul_subset_add_support, coeff_smul_right
  (y.isPWO_support.vadd ((of R).symm z).isPWO_support) support_smul_subset_vadd_support]

Result:
case h.h
Γ : Type u_1
Γ' : Type u_2
R : Type u_3
V : Type u_5
inst✝⁶ : OrderedCancelAddCommMonoid Γ
inst✝⁵ : PartialOrder Γ'
inst✝⁴ : AddAction Γ Γ'
inst✝³ : IsOrderedCancelVAdd Γ Γ'
inst✝² : AddCommMonoid V
inst✝¹ : Semiring R
inst✝ : Module R V
x y : HahnSeries Γ R
z : HahnModule Γ' R V
b : Γ'
⊢ ∑ ij ∈ VAddAntidiagonal ⋯ ⋯ b, (x * y).coeff ij.1 • ((of R).symm z).coeff ij.2 =
    ∑ ij ∈ VAddAntidiagonal ⋯ ⋯ b, x.coeff ij.1 • ((of R).symm (y • z)).coeff ij.2