Theorem: Polynomial.natDegree_map_eq_iff
File: Mathlib/Algebra/Polynomial/Degree/Lemmas.lean

Proof steps:
state_before: R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
⊢ (map f p).natDegree = p.natDegree ↔ f p.leadingCoeff ≠ 0 ∨ p.natDegree = 0
state_after: case inl
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
h : p.natDegree = 0
⊢ (map f p).natDegree = p.natDegree ↔ f p.leadingCoeff ≠ 0 ∨ p.natDegree = 0

case inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
h : p.natDegree ≠ 0
⊢ (map f p).natDegree = p.natDegree ↔ f p.leadingCoeff ≠ 0 ∨ p.natDegree = 0
tactic: rcases eq_or_ne (natDegree p) 0 with h|h
state_before: case inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
h : p.natDegree ≠ 0
⊢ (map f p).natDegree = p.natDegree ↔ f p.leadingCoeff ≠ 0 ∨ p.natDegree = 0
state_after: case inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
h : p.natDegree ≠ 0
h2 : p ≠ 0
⊢ (map f p).natDegree = p.natDegree ↔ f p.leadingCoeff ≠ 0 ∨ p.natDegree = 0
tactic: have h2 : p ≠ 0 := by rintro rfl; simp at h
state_before: case inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
h : p.natDegree ≠ 0
h2 : p ≠ 0
⊢ (map f p).natDegree = p.natDegree ↔ f p.leadingCoeff ≠ 0 ∨ p.natDegree = 0
state_after: case inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
h : p.natDegree ≠ 0
h2 : p ≠ 0
h3 : p.degree ≠ ↑0
⊢ (map f p).natDegree = p.natDegree ↔ f p.leadingCoeff ≠ 0 ∨ p.natDegree = 0
tactic: have h3 : degree p ≠ (0 : ℕ)  := degree_ne_of_natDegree_ne h
state_before: case inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
h : p.natDegree ≠ 0
h2 : p ≠ 0
h3 : p.degree ≠ ↑0
⊢ (map f p).natDegree = p.natDegree ↔ f p.leadingCoeff ≠ 0 ∨ p.natDegree = 0
state_after: case inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
h : p.natDegree ≠ 0
h2 : p ≠ 0
h3 : p.degree ≠ ↑0
⊢ (f p.leadingCoeff ≠ 0 ∨ p = 0) ∨ (map f p).degree = ↑0 ∧ p.degree = ⊥ ∨ (map f p).degree = ⊥ ∧ p.degree = ↑0 ↔
    f p.leadingCoeff ≠ 0
tactic: simp_rw [h, or_false, natDegree, WithBot.unbot'_eq_unbot'_iff, degree_map_eq_iff]
state_before: case inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
h : p.natDegree ≠ 0
h2 : p ≠ 0
h3 : p.degree ≠ ↑0
⊢ (f p.leadingCoeff ≠ 0 ∨ p = 0) ∨ (map f p).degree = ↑0 ∧ p.degree = ⊥ ∨ (map f p).degree = ⊥ ∧ p.degree = ↑0 ↔
    f p.leadingCoeff ≠ 0
state_after: case inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
h : p.natDegree ≠ 0
h2 : p ≠ 0
h3 : p.degree ≠ ↑0
⊢ map f p = 0 → p.degree = 0 → ¬f p.leadingCoeff = 0
tactic: simp [h, h2, h3]
state_before: case inr
R : Type u
S : Type v
ι : Type w
a b : R
m n : ℕ
inst✝¹ : Semiring R
p✝ q r : R[X]
inst✝ : Semiring S
f : R →+* S
p : R[X]
h : p.natDegree ≠ 0
h2 : p ≠ 0
h3 : p.degree ≠ ↑0
⊢ map f p = 0 → p.degree = 0 → ¬f p.leadingCoeff = 0
state_after: no goals
tactic: tauto