Theorem: Polynomial.isUnit_of_isUnit_leadingCoeff_of_isUnit_map
File: Mathlib/Algebra/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 f.leadingCoeff
H : IsUnit (map φ f)
⊢ IsUnit f
state_after: 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : (map φ f).degree = 0
⊢ 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : (map φ f).degree = 0
⊢ IsUnit f
state_after: 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ IsUnit f

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 f.leadingCoeff
H : IsUnit (map φ f)
dz : (map φ f).degree = 0
⊢ φ f.leadingCoeff ≠ 0

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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ IsUnit f
state_after: 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ IsUnit (C (f.coeff 0))

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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ IsUnit (C (f.coeff 0))
state_after: 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ IsUnit (f.coeff 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ IsUnit (f.coeff 0)
state_after: 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ f.coeff 0 = f.leadingCoeff

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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ f.coeff 0 = f.leadingCoeff
state_after: 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ f.coeff 0 = f.coeff f.natDegree

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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ f.coeff 0 = f.coeff f.natDegree
state_after: 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ f.coeff 0 = f.coeff 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ f ≠ 0
state_after: 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: 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
state_after: no goals

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 f.leadingCoeff
H : IsUnit (map φ f)
dz : f.degree = 0
⊢ f.coeff 0 = f.coeff Zero.zero
state_after: no goals

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 f.leadingCoeff
H : IsUnit (map φ f)
dz : (map φ f).degree = 0
⊢ φ f.leadingCoeff ≠ 0
state_after: 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : (map φ f).degree = 0
h : φ f.leadingCoeff = 0
⊢ False

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 f.leadingCoeff
H : IsUnit (map φ f)
dz : (map φ f).degree = 0
h : φ f.leadingCoeff = 0
⊢ False
state_after: 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : (map φ f).degree = 0
h : φ f.leadingCoeff = 0
u : IsUnit (φ f.leadingCoeff)
⊢ 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : (map φ f).degree = 0
h : φ f.leadingCoeff = 0
u : IsUnit (φ f.leadingCoeff)
⊢ False
state_after: 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : (map φ f).degree = 0
h : φ f.leadingCoeff = 0
u : IsUnit 0
⊢ 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 f.leadingCoeff
H : IsUnit (map φ f)
dz : (map φ f).degree = 0
h : φ f.leadingCoeff = 0
u : IsUnit 0
⊢ False
state_after: no goals