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

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
⊢ 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: obtain ⟨x, hx⟩ := IsAlgClosed.exists_aeval_eq_zero K f
  (natDegree_pos_iff_degree_pos.1 hirr.natDegree_pos).ne'
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: 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
⊢ 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.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)
⊢ 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 heq := minpoly.map_eq_of_separable_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))
⊢ 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: 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 (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: exact minpoly.irreducible (Algebra.IsIntegral.isIntegral x)
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: have := isUnit_C.2 (leadingCoeff_ne_zero.2 hirr.ne_zero).isUnit.inv
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
x : K
hx : (aeval x) f = 0
⊢ Associated f (minpoly F x)
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
x : K
hx : (aeval x) f = 0
this : IsUnit (C f.leadingCoeff⁻¹)
⊢ Associated f (minpoly F x)

tactic: exact ⟨this.unit, by rw [IsUnit.unit_spec, minpoly.eq_of_irreducible hirr hx]⟩
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
x : K
hx : (aeval x) f = 0
this : IsUnit (C f.leadingCoeff⁻¹)
⊢ Associated f (minpoly F x)
state_after: no goals

tactic: rw [IsUnit.unit_spec, minpoly.eq_of_irreducible hirr hx]
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
x : K
hx : (aeval x) f = 0
this : IsUnit (C f.leadingCoeff⁻¹)
⊢ f * ↑this.unit = minpoly F x
state_after: no goals