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

tactic: rcases eq_or_ne (natDegree p) 0 with h|h
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: 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
⊢ (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 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
⊢ (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: 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
⊢ (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 [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
⊢ (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: tauto
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: simp_rw [h, ne_eq, or_true, iff_true, ← Nat.le_zero, ← h, natDegree_map_le f p]
state_before: 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
state_after: no goals

tactic: rintro rfl
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]
h : p.natDegree ≠ 0
⊢ p ≠ 0
state_after: 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
h : natDegree 0 ≠ 0
⊢ False

tactic: simp at h
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
h : natDegree 0 ≠ 0
⊢ False
state_after: no goals