Theorem: Polynomial.isUnit_of_isUnit_leadingCoeff_of_isUnit_map
File: Mathlib/Data/Polynomial/RingDivision.lean

tactic: have dz := degree_eq_zero_of_isUnit H
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
⊢ IsUnit f

tactic: rw [degree_map_eq_of_leadingCoeff_ne_zero] at dz
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree (map φ f) = 0
⊢ IsUnit f

tactic: rw [eq_C_of_degree_eq_zero dz]
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree f = 0
⊢ IsUnit f

tactic: refine' IsUnit.map C _
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree f = 0
⊢ IsUnit (↑C (coeff f 0))

tactic: convert hf
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree f = 0
⊢ IsUnit (coeff f 0)

tactic: change coeff f 0 = coeff f (natDegree f)
state_before: case h.e'_3
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree f = 0
⊢ coeff f 0 = leadingCoeff f

tactic: rw [(degree_eq_iff_natDegree_eq _).1 dz]
state_before: case h.e'_3
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree f = 0
⊢ coeff f 0 = coeff f (natDegree f)

tactic: rfl
state_before: case h.e'_3
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree f = 0
⊢ coeff f 0 = coeff f Zero.zero

R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree f = 0
⊢ f ≠ 0

tactic: rintro rfl
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree f = 0
⊢ f ≠ 0

tactic: simp at H
state_before: R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
hf : IsUnit (leadingCoeff 0)
H : IsUnit (map φ 0)
dz : degree 0 = 0
⊢ False

tactic: intro h
state_before: case hf
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree (map φ f) = 0
⊢ ↑φ (leadingCoeff f) ≠ 0

tactic: have u : IsUnit (φ f.leadingCoeff) := IsUnit.map φ hf
state_before: case hf
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree (map φ f) = 0
h : ↑φ (leadingCoeff f) = 0
⊢ False

tactic: rw [h] at u
state_before: case hf
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree (map φ f) = 0
h : ↑φ (leadingCoeff f) = 0
u : IsUnit (↑φ (leadingCoeff f))
⊢ False

tactic: simp at u
state_before: case hf
R : Type u
S : Type v
T : Type w
a b : R
n : ℕ
inst✝² : Semiring R
inst✝¹ : CommRing S
inst✝ : IsDomain S
φ : R →+* S
f : R[X]
hf : IsUnit (leadingCoeff f)
H : IsUnit (map φ f)
dz : degree (map φ f) = 0
h : ↑φ (leadingCoeff f) = 0
u : IsUnit 0
⊢ False