Theorem: LaurentSeries.hasseDeriv_apply
File: Mathlib/RingTheory/LaurentSeries.lean

Proof steps:
state_before: R✝ : Type u_1
R : Type u_2
V : Type u_3
inst✝² : AddCommGroup V
inst✝¹ : Semiring R
inst✝ : Module R V
k : ℕ
f : LaurentSeries V
x✝ : ℤ
h_lt : x✝ < order f - ↑k
⊢ Ring.choose (x✝ + ↑k) k • f.coeff (x✝ + ↑k) = 0
state_after: no goals
tactic: rw [coeff_eq_zero_of_lt_order <| lt_sub_iff_add_lt.mp h_lt, smul_zero]
state_before: R✝ : Type u_1
R : Type u_2
V : Type u_3
inst✝² : AddCommGroup V
inst✝¹ : Semiring R
inst✝ : Module R V
k : ℕ
f g : LaurentSeries V
⊢ (fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯) (f + g) =
    (fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯) f +
      (fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯) g
state_after: case coeff.h
R✝ : Type u_1
R : Type u_2
V : Type u_3
inst✝² : AddCommGroup V
inst✝¹ : Semiring R
inst✝ : Module R V
k : ℕ
f g : LaurentSeries V
x✝ : ℤ
⊢ ((fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯) (f + g)).coeff x✝ =
    ((fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯) f +
          (fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯) g).coeff
      x✝
tactic: ext
state_before: case coeff.h
R✝ : Type u_1
R : Type u_2
V : Type u_3
inst✝² : AddCommGroup V
inst✝¹ : Semiring R
inst✝ : Module R V
k : ℕ
f g : LaurentSeries V
x✝ : ℤ
⊢ ((fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯) (f + g)).coeff x✝ =
    ((fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯) f +
          (fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯) g).coeff
      x✝
state_after: no goals
tactic: simp only [ofSuppBddBelow, add_coeff', Pi.add_apply, smul_add]
state_before: R✝ : Type u_1
R : Type u_2
V : Type u_3
inst✝² : AddCommGroup V
inst✝¹ : Semiring R
inst✝ : Module R V
k : ℕ
r : R
f : LaurentSeries V
⊢ { toFun := fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯, map_add' := ⋯ }.toFun
      (r • f) =
    (RingHom.id R) r •
      { toFun := fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯, map_add' := ⋯ }.toFun f
state_after: case coeff.h
R✝ : Type u_1
R : Type u_2
V : Type u_3
inst✝² : AddCommGroup V
inst✝¹ : Semiring R
inst✝ : Module R V
k : ℕ
r : R
f : LaurentSeries V
x✝ : ℤ
⊢ ({ toFun := fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯, map_add' := ⋯ }.toFun
          (r • f)).coeff
      x✝ =
    ((RingHom.id R) r •
          { toFun := fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯,
                map_add' := ⋯ }.toFun
            f).coeff
      x✝
tactic: ext
state_before: case coeff.h
R✝ : Type u_1
R : Type u_2
V : Type u_3
inst✝² : AddCommGroup V
inst✝¹ : Semiring R
inst✝ : Module R V
k : ℕ
r : R
f : LaurentSeries V
x✝ : ℤ
⊢ ({ toFun := fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯, map_add' := ⋯ }.toFun
          (r • f)).coeff
      x✝ =
    ((RingHom.id R) r •
          { toFun := fun f => ofSuppBddBelow (fun n => Ring.choose (n + ↑k) k • f.coeff (n + ↑k)) ⋯,
                map_add' := ⋯ }.toFun
            f).coeff
      x✝
state_after: no goals
tactic: simp only [ofSuppBddBelow, smul_coeff, RingHom.id_apply, smul_comm r]