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

tactic: apply le_order
state_before: R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
⊢ φ.order + ψ.order ≤ (φ * ψ).order
state_after: case h
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
⊢ ∀ (i : ℕ), ↑i < φ.order + ψ.order → (coeff R i) (φ * ψ) = 0

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

tactic: rw [coeff_mul, Finset.sum_eq_zero]
state_before: case h
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
⊢ (coeff R n) (φ * ψ) = 0
state_after: case h
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
⊢ ∀ x ∈ antidiagonal n, (coeff R x.1) φ * (coeff R x.2) ψ = 0

tactic: rintro ⟨i, j⟩ hij
state_before: case h
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
⊢ ∀ x ∈ antidiagonal n, (coeff R x.1) φ * (coeff R x.2) ψ = 0
state_after: case h.mk
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0

tactic: by_cases hi : ↑i < order φ
state_before: case h.mk
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0
state_after: case pos
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
hi : ↑i < φ.order
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0

case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
hi : ¬↑i < φ.order
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0

tactic: by_cases hj : ↑j < order ψ
state_before: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
hi : ¬↑i < φ.order
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0
state_after: case pos
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
hi : ¬↑i < φ.order
hj : ↑j < ψ.order
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0

case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
hi : ¬↑i < φ.order
hj : ¬↑j < ψ.order
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0

tactic: rw [not_lt] at hi hj
state_before: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
hi : ¬↑i < φ.order
hj : ¬↑j < ψ.order
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0
state_after: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
hi : φ.order ≤ ↑i
hj : ψ.order ≤ ↑j
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0

tactic: rw [mem_antidiagonal] at hij
state_before: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
hi : φ.order ≤ ↑i
hj : ψ.order ≤ ↑j
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0
state_after: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j).1 + (i, j).2 = n
hi : φ.order ≤ ↑i
hj : ψ.order ≤ ↑j
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0

tactic: exfalso
state_before: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j).1 + (i, j).2 = n
hi : φ.order ≤ ↑i
hj : ψ.order ≤ ↑j
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0
state_after: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j).1 + (i, j).2 = n
hi : φ.order ≤ ↑i
hj : ψ.order ≤ ↑j
⊢ False

tactic: apply ne_of_lt (lt_of_lt_of_le hn <| add_le_add hi hj)
state_before: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j).1 + (i, j).2 = n
hi : φ.order ≤ ↑i
hj : ψ.order ≤ ↑j
⊢ False
state_after: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j).1 + (i, j).2 = n
hi : φ.order ≤ ↑i
hj : ψ.order ≤ ↑j
⊢ ↑n = ↑i + ↑j

tactic: rw [← Nat.cast_add, hij]
state_before: case neg
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j).1 + (i, j).2 = n
hi : φ.order ≤ ↑i
hj : ψ.order ≤ ↑j
⊢ ↑n = ↑i + ↑j
state_after: no goals

tactic: rw [coeff_of_lt_order i hi, zero_mul]
state_before: case pos
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
hi : ↑i < φ.order
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0
state_after: no goals

tactic: rw [coeff_of_lt_order j hj, mul_zero]
state_before: case pos
R : Type u_1
inst✝ : Semiring R
φ✝ φ ψ : R⟦X⟧
n : ℕ
hn : ↑n < φ.order + ψ.order
i j : ℕ
hij : (i, j) ∈ antidiagonal n
hi : ¬↑i < φ.order
hj : ↑j < ψ.order
⊢ (coeff R (i, j).1) φ * (coeff R (i, j).2) ψ = 0
state_after: no goals