Theorem: Polynomial.Monic.map
File: Mathlib/Algebra/Polynomial/Monic.lean

tactic: unfold Monic
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
⊢ (Polynomial.map f p).Monic
state_after: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
⊢ (Polynomial.map f p).leadingCoeff = 1

tactic: nontriviality
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
⊢ (Polynomial.map f p).leadingCoeff = 1
state_after: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
⊢ (Polynomial.map f p).leadingCoeff = 1

tactic: have : f p.leadingCoeff ≠ 0 := by
  rw [show _ = _ from hp, f.map_one]
  exact one_ne_zero
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
⊢ (Polynomial.map f p).leadingCoeff = 1
state_after: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
this : f p.leadingCoeff ≠ 0
⊢ (Polynomial.map f p).leadingCoeff = 1

tactic: rw [Polynomial.leadingCoeff, coeff_map]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
this : f p.leadingCoeff ≠ 0
⊢ (Polynomial.map f p).leadingCoeff = 1
state_after: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
this : f p.leadingCoeff ≠ 0
⊢ f (p.coeff (Polynomial.map f p).natDegree) = 1

tactic: suffices p.coeff (p.map f).natDegree = 1 by simp [this]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
this : f p.leadingCoeff ≠ 0
⊢ f (p.coeff (Polynomial.map f p).natDegree) = 1
state_after: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
this : f p.leadingCoeff ≠ 0
⊢ p.coeff (Polynomial.map f p).natDegree = 1

tactic: rwa [natDegree_eq_of_degree_eq (degree_map_eq_of_leadingCoeff_ne_zero f this)]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
this : f p.leadingCoeff ≠ 0
⊢ p.coeff (Polynomial.map f p).natDegree = 1
state_after: no goals

tactic: rw [show _ = _ from hp, f.map_one]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
⊢ f p.leadingCoeff ≠ 0
state_after: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
⊢ 1 ≠ 0

tactic: exact one_ne_zero
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
⊢ 1 ≠ 0
state_after: no goals

tactic: simp [this]
state_before: R : Type u
S : Type v
a b : R
m n : ℕ
ι : Type y
inst✝¹ : Semiring R
p q r : R[X]
inst✝ : Semiring S
f : R →+* S
hp : p.Monic
a✝ : Nontrivial S
this✝ : f p.leadingCoeff ≠ 0
this : p.coeff (Polynomial.map f p).natDegree = 1
⊢ f (p.coeff (Polynomial.map f p).natDegree) = 1
state_after: no goals