Theorem: PowerSeries.order_mul_ge
File: Mathlib/RingTheory/PowerSeries/Basic.lean

tactic: apply le_order
state_before: R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
⊢ order φ + order ψ ≤ order (φ * ψ)

tactic: intro n hn
state_before: case h
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
⊢ ∀ (i : ℕ), ↑i < order φ + order ψ → ↑(coeff R i) (φ * ψ) = 0

tactic: rw [coeff_mul, Finset.sum_eq_zero]
state_before: case h
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
n : ℕ
hn : ↑n < order φ + order ψ
⊢ ↑(coeff R n) (φ * ψ) = 0

tactic: rintro ⟨i, j⟩ hij
state_before: case h
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
n : ℕ
hn : ↑n < order φ + order ψ
⊢ ∀ (x : ℕ × ℕ), x ∈ Finset.Nat.antidiagonal n → ↑(coeff R x.fst) φ * ↑(coeff R x.snd) ψ = 0

tactic: by_cases hi : ↑i < order φ
state_before: case h.mk
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
n : ℕ
hn : ↑n < order φ + order ψ
i j : ℕ
hij : (i, j) ∈ Finset.Nat.antidiagonal n
⊢ ↑(coeff R (i, j).fst) φ * ↑(coeff R (i, j).snd) ψ = 0

tactic: by_cases hj : ↑j < order ψ
state_before: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
n : ℕ
hn : ↑n < order φ + order ψ
i j : ℕ
hij : (i, j) ∈ Finset.Nat.antidiagonal n
hi : ¬↑i < order φ
⊢ ↑(coeff R (i, j).fst) φ * ↑(coeff R (i, j).snd) ψ = 0

tactic: rw [not_lt] at hi hj
state_before: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
n : ℕ
hn : ↑n < order φ + order ψ
i j : ℕ
hij : (i, j) ∈ Finset.Nat.antidiagonal n
hi : ¬↑i < order φ
hj : ¬↑j < order ψ
⊢ ↑(coeff R (i, j).fst) φ * ↑(coeff R (i, j).snd) ψ = 0

tactic: rw [Finset.Nat.mem_antidiagonal] at hij
state_before: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
n : ℕ
hn : ↑n < order φ + order ψ
i j : ℕ
hij : (i, j) ∈ Finset.Nat.antidiagonal n
hi : order φ ≤ ↑i
hj : order ψ ≤ ↑j
⊢ ↑(coeff R (i, j).fst) φ * ↑(coeff R (i, j).snd) ψ = 0

tactic: exfalso
state_before: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
n : ℕ
hn : ↑n < order φ + order ψ
i j : ℕ
hij : (i, j).fst + (i, j).snd = n
hi : order φ ≤ ↑i
hj : order ψ ≤ ↑j
⊢ ↑(coeff R (i, j).fst) φ * ↑(coeff R (i, j).snd) ψ = 0

tactic: apply ne_of_lt (lt_of_lt_of_le hn <| add_le_add hi hj)
state_before: case neg.h
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
n : ℕ
hn : ↑n < order φ + order ψ
i j : ℕ
hij : (i, j).fst + (i, j).snd = n
hi : order φ ≤ ↑i
hj : order ψ ≤ ↑j
⊢ False

tactic: rw [← Nat.cast_add, hij]
state_before: case neg.h
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
n : ℕ
hn : ↑n < order φ + order ψ
i j : ℕ
hij : (i, j).fst + (i, j).snd = n
hi : order φ ≤ ↑i
hj : order ψ ≤ ↑j
⊢ ↑n = ↑i + ↑j

tactic: rw [coeff_of_lt_order i hi, MulZeroClass.zero_mul]
state_before: case pos
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
n : ℕ
hn : ↑n < order φ + order ψ
i j : ℕ
hij : (i, j) ∈ Finset.Nat.antidiagonal n
hi : ↑i < order φ
⊢ ↑(coeff R (i, j).fst) φ * ↑(coeff R (i, j).snd) ψ = 0

tactic: rw [coeff_of_lt_order j hj, MulZeroClass.mul_zero]
state_before: case pos
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : PowerSeries R
n : ℕ
hn : ↑n < order φ + order ψ
i j : ℕ
hij : (i, j) ∈ Finset.Nat.antidiagonal n
hi : ¬↑i < order φ
hj : ↑j < order ψ
⊢ ↑(coeff R (i, j).fst) φ * ↑(coeff R (i, j).snd) ψ = 0