Theorem: Polynomial.Separable.map_irreducible_of_isPurelyInseparable
File: Mathlib/FieldTheory/PurelyInseparable.lean

Proof steps:
state_before: F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K : Type w
inst✝⁴ : Field K
inst✝³ : Algebra F K
inst✝² : Algebra E K
inst✝¹ : IsScalarTower F E K
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
⊢ Irreducible (Polynomial.map (algebraMap F E) f)
state_after: F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
⊢ Irreducible (Polynomial.map (algebraMap F E) f)
tactic: let K := AlgebraicClosure E
state_before: F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
⊢ Irreducible (Polynomial.map (algebraMap F E) f)
state_after: case intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
x : K
hx : (aeval x) f = 0
⊢ Irreducible (Polynomial.map (algebraMap F E) f)
tactic: obtain ⟨x, hx⟩ := IsAlgClosed.exists_aeval_eq_zero K f
    (natDegree_pos_iff_degree_pos.1 hirr.natDegree_pos).ne'
state_before: case intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
x : K
hx : (aeval x) f = 0
⊢ Irreducible (Polynomial.map (algebraMap F E) f)
state_after: case intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
x : K
hx : (aeval x) f = 0
ha : Associated f (minpoly F x)
⊢ Irreducible (Polynomial.map (algebraMap F E) f)
tactic: have ha : Associated f (minpoly F x) := by
    have := isUnit_C.2 (leadingCoeff_ne_zero.2 hirr.ne_zero).isUnit.inv
    exact ⟨this.unit, by rw [IsUnit.unit_spec, minpoly.eq_of_irreducible hirr hx]⟩
state_before: case intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
x : K
hx : (aeval x) f = 0
ha : Associated f (minpoly F x)
⊢ Irreducible (Polynomial.map (algebraMap F E) f)
state_after: case intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
x : K
hx : (aeval x) f = 0
ha : Associated f (minpoly F x)
ha' : Associated (Polynomial.map (algebraMap F E) f) (Polynomial.map (algebraMap F E) (minpoly F x))
⊢ Irreducible (Polynomial.map (algebraMap F E) f)
tactic: have ha' : Associated (f.map (algebraMap F E)) ((minpoly F x).map (algebraMap F E)) :=
    ha.map (mapRingHom (algebraMap F E)).toMonoidHom
state_before: case intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
x : K
hx : (aeval x) f = 0
ha : Associated f (minpoly F x)
ha' : Associated (Polynomial.map (algebraMap F E) f) (Polynomial.map (algebraMap F E) (minpoly F x))
⊢ Irreducible (Polynomial.map (algebraMap F E) f)
state_after: case intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
x : K
hx : (aeval x) f = 0
ha : Associated f (minpoly F x)
ha' : Associated (Polynomial.map (algebraMap F E) f) (Polynomial.map (algebraMap F E) (minpoly F x))
heq : Polynomial.map (algebraMap F E) (minpoly F x) = minpoly E x
⊢ Irreducible (Polynomial.map (algebraMap F E) f)
tactic: have heq := minpoly.map_eq_of_isSeparable_of_isPurelyInseparable E x (ha.separable hsep)
state_before: case intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
x : K
hx : (aeval x) f = 0
ha : Associated f (minpoly F x)
ha' : Associated (Polynomial.map (algebraMap F E) f) (Polynomial.map (algebraMap F E) (minpoly F x))
heq : Polynomial.map (algebraMap F E) (minpoly F x) = minpoly E x
⊢ Irreducible (Polynomial.map (algebraMap F E) f)
state_after: case intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
x : K
hx : (aeval x) f = 0
ha : Associated f (minpoly F x)
ha' : Associated (Polynomial.map (algebraMap F E) f) (Polynomial.map (algebraMap F E) (minpoly F x))
heq : Polynomial.map (algebraMap F E) (minpoly F x) = minpoly E x
⊢ Irreducible (minpoly E x)
tactic: rw [ha'.irreducible_iff, heq]
state_before: case intro
F : Type u
E : Type v
inst✝⁷ : Field F
inst✝⁶ : Field E
inst✝⁵ : Algebra F E
K✝ : Type w
inst✝⁴ : Field K✝
inst✝³ : Algebra F K✝
inst✝² : Algebra E K✝
inst✝¹ : IsScalarTower F E K✝
f : F[X]
hsep : f.Separable
hirr : Irreducible f
inst✝ : IsPurelyInseparable F E
K : Type v := AlgebraicClosure E
x : K
hx : (aeval x) f = 0
ha : Associated f (minpoly F x)
ha' : Associated (Polynomial.map (algebraMap F E) f) (Polynomial.map (algebraMap F E) (minpoly F x))
heq : Polynomial.map (algebraMap F E) (minpoly F x) = minpoly E x
⊢ Irreducible (minpoly E x)
state_after: no goals
tactic: exact minpoly.irreducible (Algebra.IsIntegral.isIntegral x)