Theorem: PowerSeries.mk_one_pow_eq_mk_choose_add
File: Mathlib/RingTheory/PowerSeries/WellKnown.lean

tactic: induction d with
| zero => ext; simp
| succ d hd =>
    ext n
    rw [pow_add, hd, pow_one, mul_comm, coeff_mul]
    simp_rw [coeff_mk, Pi.one_apply, one_mul]
    norm_cast
    rw [Finset.sum_antidiagonal_choose_add, ← Nat.choose_succ_succ, Nat.succ_eq_add_one,
      add_right_comm]
state_before: S : Type u_1
inst✝ : CommRing S
d : ℕ
⊢ mk 1 ^ (d + 1) = mk fun n => ↑((d + n).choose d)
state_after: no goals

tactic: ext
state_before: case zero
S : Type u_1
inst✝ : CommRing S
d : ℕ
⊢ mk 1 ^ (0 + 1) = mk fun n => ↑((0 + n).choose 0)
state_after: case zero.h
S : Type u_1
inst✝ : CommRing S
d n✝ : ℕ
⊢ (coeff S n✝) (mk 1 ^ (0 + 1)) = (coeff S n✝) (mk fun n => ↑((0 + n).choose 0))

tactic: simp
state_before: case zero.h
S : Type u_1
inst✝ : CommRing S
d n✝ : ℕ
⊢ (coeff S n✝) (mk 1 ^ (0 + 1)) = (coeff S n✝) (mk fun n => ↑((0 + n).choose 0))
state_after: no goals

tactic: ext n
state_before: case succ
S : Type u_1
inst✝ : CommRing S
d✝ d : ℕ
hd : mk 1 ^ (d + 1) = mk fun n => ↑((d + n).choose d)
⊢ mk 1 ^ (d + 1 + 1) = mk fun n => ↑((d + 1 + n).choose (d + 1))
state_after: case succ.h
S : Type u_1
inst✝ : CommRing S
d✝ d : ℕ
hd : mk 1 ^ (d + 1) = mk fun n => ↑((d + n).choose d)
n : ℕ
⊢ (coeff S n) (mk 1 ^ (d + 1 + 1)) = (coeff S n) (mk fun n => ↑((d + 1 + n).choose (d + 1)))

tactic: rw [pow_add, hd, pow_one, mul_comm, coeff_mul]
state_before: case succ.h
S : Type u_1
inst✝ : CommRing S
d✝ d : ℕ
hd : mk 1 ^ (d + 1) = mk fun n => ↑((d + n).choose d)
n : ℕ
⊢ (coeff S n) (mk 1 ^ (d + 1 + 1)) = (coeff S n) (mk fun n => ↑((d + 1 + n).choose (d + 1)))
state_after: case succ.h
S : Type u_1
inst✝ : CommRing S
d✝ d : ℕ
hd : mk 1 ^ (d + 1) = mk fun n => ↑((d + n).choose d)
n : ℕ
⊢ ∑ p ∈ Finset.antidiagonal n, (coeff S p.1) (mk 1) * (coeff S p.2) (mk fun n => ↑((d + n).choose d)) =
    (coeff S n) (mk fun n => ↑((d + 1 + n).choose (d + 1)))

tactic: simp_rw [coeff_mk, Pi.one_apply, one_mul]
state_before: case succ.h
S : Type u_1
inst✝ : CommRing S
d✝ d : ℕ
hd : mk 1 ^ (d + 1) = mk fun n => ↑((d + n).choose d)
n : ℕ
⊢ ∑ p ∈ Finset.antidiagonal n, (coeff S p.1) (mk 1) * (coeff S p.2) (mk fun n => ↑((d + n).choose d)) =
    (coeff S n) (mk fun n => ↑((d + 1 + n).choose (d + 1)))
state_after: case succ.h
S : Type u_1
inst✝ : CommRing S
d✝ d : ℕ
hd : mk 1 ^ (d + 1) = mk fun n => ↑((d + n).choose d)
n : ℕ
⊢ ∑ x ∈ Finset.antidiagonal n, ↑((d + x.2).choose d) = ↑((d + 1 + n).choose (d + 1))

tactic: norm_cast
state_before: case succ.h
S : Type u_1
inst✝ : CommRing S
d✝ d : ℕ
hd : mk 1 ^ (d + 1) = mk fun n => ↑((d + n).choose d)
n : ℕ
⊢ ∑ x ∈ Finset.antidiagonal n, ↑((d + x.2).choose d) = ↑((d + 1 + n).choose (d + 1))
state_after: case succ.h
S : Type u_1
inst✝ : CommRing S
d✝ d : ℕ
hd : mk 1 ^ (d + 1) = mk fun n => ↑((d + n).choose d)
n : ℕ
⊢ ↑(∑ x ∈ Finset.antidiagonal n, (d + x.2).choose d) = ↑((d + 1 + n).choose (d + 1))

tactic: rw [Finset.sum_antidiagonal_choose_add, ← Nat.choose_succ_succ, Nat.succ_eq_add_one,
  add_right_comm]
state_before: case succ.h
S : Type u_1
inst✝ : CommRing S
d✝ d : ℕ
hd : mk 1 ^ (d + 1) = mk fun n => ↑((d + n).choose d)
n : ℕ
⊢ ↑(∑ x ∈ Finset.antidiagonal n, (d + x.2).choose d) = ↑((d + 1 + n).choose (d + 1))
state_after: no goals