Theorem: _private.Mathlib.FieldTheory.Extension.0.IntermediateField.exists_algHom_adjoin_of_splits''
File: Mathlib/FieldTheory/Extension.lean

Proof steps:
state_before: F : Type u_1
E : Type u_2
K : Type u_3
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
L : IntermediateField F E
f : ↥L →ₐ[F] K
hK : ∀ s ∈ S, IsIntegral (↥L) s ∧ Splits f.toRingHom (minpoly (↥L) s)
⊢ ∃ φ, φ.comp (IsScalarTower.toAlgHom F ↥L ↥(adjoin (↥L) S)) = f
state_after: case intro.intro
F : Type u_1
E : Type u_2
K : Type u_3
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
L : IntermediateField F E
f : ↥L →ₐ[F] K
hK : ∀ s ∈ S, IsIntegral (↥L) s ∧ Splits f.toRingHom (minpoly (↥L) s)
φ : Lifts F E K
hfφ : { carrier := L, emb := f } ≤ φ
hφ : ∀ (z : Lifts F E K), φ ≤ z → z ≤ φ
⊢ ∃ φ, φ.comp (IsScalarTower.toAlgHom F ↥L ↥(adjoin (↥L) S)) = f
tactic: obtain ⟨φ, hfφ, hφ⟩ := zorn_nonempty_Ici₀ _
    (fun c _ hc _ _ ↦ Lifts.exists_upper_bound c hc) ⟨L, f⟩ le_rfl
state_before: case intro.intro
F : Type u_1
E : Type u_2
K : Type u_3
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
L : IntermediateField F E
f : ↥L →ₐ[F] K
hK : ∀ s ∈ S, IsIntegral (↥L) s ∧ Splits f.toRingHom (minpoly (↥L) s)
φ : Lifts F E K
hfφ : { carrier := L, emb := f } ≤ φ
hφ : ∀ (z : Lifts F E K), φ ≤ z → z ≤ φ
⊢ ∃ φ, φ.comp (IsScalarTower.toAlgHom F ↥L ↥(adjoin (↥L) S)) = f
state_after: case intro.intro
F : Type u_1
E : Type u_2
K : Type u_3
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
L : IntermediateField F E
f : ↥L →ₐ[F] K
hK : ∀ s ∈ S, IsIntegral (↥L) s ∧ Splits f.toRingHom (minpoly (↥L) s)
φ : Lifts F E K
hfφ : { carrier := L, emb := f } ≤ φ
hφ : ∀ (z : Lifts F E K), φ ≤ z → z ≤ φ
s : E
h : s ∈ S
⊢ s ∈ ↑(extendScalars ⋯)
tactic: refine ⟨φ.emb.comp (inclusion <| (le_extendScalars_iff hfφ.1 <| adjoin L S).mp <|
    adjoin_le_iff.mpr fun s h ↦ ?_), AlgHom.ext hfφ.2⟩
state_before: case intro.intro
F : Type u_1
E : Type u_2
K : Type u_3
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
L : IntermediateField F E
f : ↥L →ₐ[F] K
hK : ∀ s ∈ S, IsIntegral (↥L) s ∧ Splits f.toRingHom (minpoly (↥L) s)
φ : Lifts F E K
hfφ : { carrier := L, emb := f } ≤ φ
hφ : ∀ (z : Lifts F E K), φ ≤ z → z ≤ φ
s : E
h : s ∈ S
⊢ s ∈ ↑(extendScalars ⋯)
state_after: case intro.intro
F : Type u_1
E : Type u_2
K : Type u_3
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
L : IntermediateField F E
f : ↥L →ₐ[F] K
hK : ∀ s ∈ S, IsIntegral (↥L) s ∧ Splits f.toRingHom (minpoly (↥L) s)
φ : Lifts F E K
hfφ : { carrier := L, emb := f } ≤ φ
hφ : ∀ (z : Lifts F E K), φ ≤ z → z ≤ φ
s : E
h : s ∈ S
this : Algebra ↥{ carrier := L, emb := f }.carrier ↥φ.carrier := (inclusion ⋯).toAlgebra
⊢ s ∈ ↑(extendScalars ⋯)
tactic: letI := (inclusion hfφ.1).toAlgebra
state_before: case intro.intro
F : Type u_1
E : Type u_2
K : Type u_3
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
L : IntermediateField F E
f : ↥L →ₐ[F] K
hK : ∀ s ∈ S, IsIntegral (↥L) s ∧ Splits f.toRingHom (minpoly (↥L) s)
φ : Lifts F E K
hfφ : { carrier := L, emb := f } ≤ φ
hφ : ∀ (z : Lifts F E K), φ ≤ z → z ≤ φ
s : E
h : s ∈ S
this : Algebra ↥{ carrier := L, emb := f }.carrier ↥φ.carrier := (inclusion ⋯).toAlgebra
⊢ s ∈ ↑(extendScalars ⋯)
state_after: case intro.intro
F : Type u_1
E : Type u_2
K : Type u_3
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
L : IntermediateField F E
f : ↥L →ₐ[F] K
hK : ∀ s ∈ S, IsIntegral (↥L) s ∧ Splits f.toRingHom (minpoly (↥L) s)
φ : Lifts F E K
hfφ : { carrier := L, emb := f } ≤ φ
hφ : ∀ (z : Lifts F E K), φ ≤ z → z ≤ φ
s : E
h : s ∈ S
this✝ : Algebra ↥{ carrier := L, emb := f }.carrier ↥φ.carrier := (inclusion ⋯).toAlgebra
this : SMul ↥L ↥φ.carrier := Algebra.toSMul
⊢ s ∈ ↑(extendScalars ⋯)
tactic: letI : SMul L φ.carrier := Algebra.toSMul
state_before: case intro.intro
F : Type u_1
E : Type u_2
K : Type u_3
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
L : IntermediateField F E
f : ↥L →ₐ[F] K
hK : ∀ s ∈ S, IsIntegral (↥L) s ∧ Splits f.toRingHom (minpoly (↥L) s)
φ : Lifts F E K
hfφ : { carrier := L, emb := f } ≤ φ
hφ : ∀ (z : Lifts F E K), φ ≤ z → z ≤ φ
s : E
h : s ∈ S
this✝¹ : Algebra ↥{ carrier := L, emb := f }.carrier ↥φ.carrier := (inclusion ⋯).toAlgebra
this✝ : SMul ↥L ↥φ.carrier := Algebra.toSMul
this : IsScalarTower (↥L) (↥φ.carrier) E
⊢ s ∈ ↑(extendScalars ⋯)
state_after: case intro.intro.refine_2
F : Type u_1
E : Type u_2
K : Type u_3
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
L : IntermediateField F E
f : ↥L →ₐ[F] K
hK : ∀ s ∈ S, IsIntegral (↥L) s ∧ Splits f.toRingHom (minpoly (↥L) s)
φ : Lifts F E K
hfφ : { carrier := L, emb := f } ≤ φ
hφ : ∀ (z : Lifts F E K), φ ≤ z → z ≤ φ
s : E
h : s ∈ S
this✝² : Algebra ↥{ carrier := L, emb := f }.carrier ↥φ.carrier := (inclusion ⋯).toAlgebra
this✝¹ : SMul ↥L ↥φ.carrier := Algebra.toSMul
this✝ : IsScalarTower (↥L) (↥φ.carrier) E
this : ∃ y, φ ≤ y ∧ s ∈ y.carrier
⊢ s ∈ ↑(extendScalars ⋯)

case intro.intro.refine_1
F : Type u_1
E : Type u_2
K : Type u_3
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
L : IntermediateField F E
f : ↥L →ₐ[F] K
hK : ∀ s ∈ S, IsIntegral (↥L) s ∧ Splits f.toRingHom (minpoly (↥L) s)
φ : Lifts F E K
hfφ : { carrier := L, emb := f } ≤ φ
hφ : ∀ (z : Lifts F E K), φ ≤ z → z ≤ φ
s : E
h : s ∈ S
this✝¹ : Algebra ↥{ carrier := L, emb := f }.carrier ↥φ.carrier := (inclusion ⋯).toAlgebra
this✝ : SMul ↥L ↥φ.carrier := Algebra.toSMul
this : IsScalarTower (↥L) (↥φ.carrier) E
⊢ Splits (φ.emb.comp (algebraMap ↥L ↥φ.carrier)) (minpoly (↥L) s)
tactic: have := φ.exists_lift_of_splits' (hK s h).1.tower_top ((hK s h).1.minpoly_splits_tower_top' ?_)