Theorem: IntermediateField.splits_of_mem_adjoin
File: Mathlib/FieldTheory/Normal.lean

tactic: let E : IntermediateField F L := ⨆ x : S, adjoin F ((minpoly F x.val).rootSet L)
state_before: F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x : K
hx : x ∈ adjoin F S
⊢ Splits (algebraMap F L) (minpoly F x)
state_after: F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x : K
hx : x ∈ adjoin F S
E : IntermediateField F L := ⨆ x, adjoin F ((minpoly F ↑x).rootSet L)
⊢ Splits (algebraMap F L) (minpoly F x)

tactic: have normal : Normal F E := normal_iSup (h := fun x ↦
  Normal.of_isSplittingField (hFEp := adjoin_rootSet_isSplittingField (splits x x.2).2))
state_before: F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x : K
hx : x ∈ adjoin F S
E : IntermediateField F L := ⨆ x, adjoin F ((minpoly F ↑x).rootSet L)
⊢ Splits (algebraMap F L) (minpoly F x)
state_after: F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x : K
hx : x ∈ adjoin F S
E : IntermediateField F L := ⨆ x, adjoin F ((minpoly F ↑x).rootSet L)
normal : Normal F ↥E
⊢ Splits (algebraMap F L) (minpoly F x)

tactic: have : ∀ x ∈ S, (minpoly F x).Splits (algebraMap F E) := fun x hx ↦ splits_of_splits
  (splits x hx).2 fun y hy ↦ (le_iSup _ ⟨x, hx⟩ : _ ≤ E) (subset_adjoin F _ <| by exact hy)
state_before: F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x : K
hx : x ∈ adjoin F S
E : IntermediateField F L := ⨆ x, adjoin F ((minpoly F ↑x).rootSet L)
normal : Normal F ↥E
⊢ Splits (algebraMap F L) (minpoly F x)
state_after: F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x : K
hx : x ∈ adjoin F S
E : IntermediateField F L := ⨆ x, adjoin F ((minpoly F ↑x).rootSet L)
normal : Normal F ↥E
this : ∀ x ∈ S, Splits (algebraMap F ↥E) (minpoly F x)
⊢ Splits (algebraMap F L) (minpoly F x)

tactic: obtain ⟨φ⟩ := nonempty_algHom_adjoin_of_splits fun x hx ↦ ⟨(splits x hx).1, this x hx⟩
state_before: F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x : K
hx : x ∈ adjoin F S
E : IntermediateField F L := ⨆ x, adjoin F ((minpoly F ↑x).rootSet L)
normal : Normal F ↥E
this : ∀ x ∈ S, Splits (algebraMap F ↥E) (minpoly F x)
⊢ Splits (algebraMap F L) (minpoly F x)
state_after: case intro
F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x : K
hx : x ∈ adjoin F S
E : IntermediateField F L := ⨆ x, adjoin F ((minpoly F ↑x).rootSet L)
normal : Normal F ↥E
this : ∀ x ∈ S, Splits (algebraMap F ↥E) (minpoly F x)
φ : ↥(adjoin F S) →ₐ[F] ↥E
⊢ Splits (algebraMap F L) (minpoly F x)

tactic: convert splits_comp_of_splits _ E.val.toRingHom (normal.splits <| φ ⟨x, hx⟩)
state_before: case intro
F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x : K
hx : x ∈ adjoin F S
E : IntermediateField F L := ⨆ x, adjoin F ((minpoly F ↑x).rootSet L)
normal : Normal F ↥E
this : ∀ x ∈ S, Splits (algebraMap F ↥E) (minpoly F x)
φ : ↥(adjoin F S) →ₐ[F] ↥E
⊢ Splits (algebraMap F L) (minpoly F x)
state_after: case h.e'_6
F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x : K
hx : x ∈ adjoin F S
E : IntermediateField F L := ⨆ x, adjoin F ((minpoly F ↑x).rootSet L)
normal : Normal F ↥E
this : ∀ x ∈ S, Splits (algebraMap F ↥E) (minpoly F x)
φ : ↥(adjoin F S) →ₐ[F] ↥E
⊢ minpoly F x = minpoly F (φ ⟨x, hx⟩)

tactic: rw [minpoly.algHom_eq _ φ.injective, ← minpoly.algHom_eq _ (adjoin F S).val.injective, val_mk]
state_before: case h.e'_6
F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x : K
hx : x ∈ adjoin F S
E : IntermediateField F L := ⨆ x, adjoin F ((minpoly F ↑x).rootSet L)
normal : Normal F ↥E
this : ∀ x ∈ S, Splits (algebraMap F ↥E) (minpoly F x)
φ : ↥(adjoin F S) →ₐ[F] ↥E
⊢ minpoly F x = minpoly F (φ ⟨x, hx⟩)
state_after: no goals

tactic: exact hy
state_before: F : Type u_1
K : Type u_2
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Algebra F K
L : Type u_3
inst✝¹ : Field L
inst✝ : Algebra F L
S : Set K
splits : ∀ x ∈ S, IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
x✝ : K
hx✝ : x✝ ∈ adjoin F S
E : IntermediateField F L := ⨆ x, adjoin F ((minpoly F ↑x).rootSet L)
normal : Normal F ↥E
x : K
hx : x ∈ S
y : L
hy : y ∈ (minpoly F x).rootSet L
⊢ y ∈ (minpoly F ↑⟨x, hx⟩).rootSet L
state_after: no goals