Theorem: Irreducible.exists_dvd_monic_irreducible_of_isIntegral
File: Mathlib/RingTheory/AdjoinRoot.lean

Proof steps:
state_before: R : Type u
S : Type v
K✝ : Type w
K : Type u_1
L : Type u_2
inst✝⁴ : CommRing K
inst✝³ : IsDomain K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsIntegral K L
f : L[X]
hf : Irreducible f
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ f ∣ Polynomial.map (algebraMap K L) g
state_after: R : Type u
S : Type v
K✝ : Type w
K : Type u_1
L : Type u_2
inst✝⁴ : CommRing K
inst✝³ : IsDomain K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsIntegral K L
f : L[X]
hf : Irreducible f
this : Fact (Irreducible f)
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ f ∣ Polynomial.map (algebraMap K L) g
tactic: haveI := Fact.mk hf
state_before: R : Type u
S : Type v
K✝ : Type w
K : Type u_1
L : Type u_2
inst✝⁴ : CommRing K
inst✝³ : IsDomain K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsIntegral K L
f : L[X]
hf : Irreducible f
this : Fact (Irreducible f)
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ f ∣ Polynomial.map (algebraMap K L) g
state_after: R : Type u
S : Type v
K✝ : Type w
K : Type u_1
L : Type u_2
inst✝⁴ : CommRing K
inst✝³ : IsDomain K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsIntegral K L
f : L[X]
hf : Irreducible f
this : Fact (Irreducible f)
h : f ≠ 0
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ f ∣ Polynomial.map (algebraMap K L) g
tactic: have h := hf.ne_zero
state_before: R : Type u
S : Type v
K✝ : Type w
K : Type u_1
L : Type u_2
inst✝⁴ : CommRing K
inst✝³ : IsDomain K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsIntegral K L
f : L[X]
hf : Irreducible f
this : Fact (Irreducible f)
h : f ≠ 0
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ f ∣ Polynomial.map (algebraMap K L) g
state_after: R : Type u
S : Type v
K✝ : Type w
K : Type u_1
L : Type u_2
inst✝⁴ : CommRing K
inst✝³ : IsDomain K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsIntegral K L
f : L[X]
hf : Irreducible f
this : Fact (Irreducible f)
h : f ≠ 0
h2 : IsIntegral K (AdjoinRoot.root f)
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ f ∣ Polynomial.map (algebraMap K L) g
tactic: have h2 := isIntegral_trans (R := K) _ (AdjoinRoot.isIntegral_root h)
state_before: R : Type u
S : Type v
K✝ : Type w
K : Type u_1
L : Type u_2
inst✝⁴ : CommRing K
inst✝³ : IsDomain K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsIntegral K L
f : L[X]
hf : Irreducible f
this : Fact (Irreducible f)
h : f ≠ 0
h2 : IsIntegral K (AdjoinRoot.root f)
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ f ∣ Polynomial.map (algebraMap K L) g
state_after: R : Type u
S : Type v
K✝ : Type w
K : Type u_1
L : Type u_2
inst✝⁴ : CommRing K
inst✝³ : IsDomain K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsIntegral K L
f : L[X]
hf : Irreducible f
this : Fact (Irreducible f)
h : f ≠ 0
h2 : IsIntegral K (AdjoinRoot.root f)
h3 : f * C f.leadingCoeff⁻¹ ∣ Polynomial.map (algebraMap K L) (minpoly K (AdjoinRoot.root f))
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ f ∣ Polynomial.map (algebraMap K L) g
tactic: have h3 := (AdjoinRoot.minpoly_root h) ▸ minpoly.dvd_map_of_isScalarTower K L (AdjoinRoot.root f)
state_before: R : Type u
S : Type v
K✝ : Type w
K : Type u_1
L : Type u_2
inst✝⁴ : CommRing K
inst✝³ : IsDomain K
inst✝² : Field L
inst✝¹ : Algebra K L
inst✝ : Algebra.IsIntegral K L
f : L[X]
hf : Irreducible f
this : Fact (Irreducible f)
h : f ≠ 0
h2 : IsIntegral K (AdjoinRoot.root f)
h3 : f * C f.leadingCoeff⁻¹ ∣ Polynomial.map (algebraMap K L) (minpoly K (AdjoinRoot.root f))
⊢ ∃ g, g.Monic ∧ Irreducible g ∧ f ∣ Polynomial.map (algebraMap K L) g
state_after: no goals
tactic: exact ⟨_, minpoly.monic h2, minpoly.irreducible h2, dvd_of_mul_right_dvd h3⟩