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

tactic: obtain ⟨φ, hfφ, hφ⟩ := zorn_nonempty_Ici₀ _
  (fun c _ hc _ _ ↦ Lifts.exists_upper_bound c hc) ⟨L, f⟩ le_rfl
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: 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 ≤ φ
⊢ ∃ φ, φ.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: 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
⊢ 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 : 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
⊢ 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: have := φ.exists_lift_of_splits' (hK s h).1.tower_top ((hK s h).1.minpoly_splits_tower_top' ?_)
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: obtain ⟨y, h1, h2⟩ := this
state_before: 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 ⋯)
state_after: case intro.intro.refine_2.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
y : Lifts F E K
h1 : φ ≤ y
h2 : s ∈ y.carrier
⊢ s ∈ ↑(extendScalars ⋯)

tactic: exact (hφ y h1).1 h2
state_before: case intro.intro.refine_2.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
y : Lifts F E K
h1 : φ ≤ y
h2 : s ∈ y.carrier
⊢ s ∈ ↑(extendScalars ⋯)
state_after: no goals

tactic: convert (hK s h).2
state_before: 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)
state_after: case h.e'_5
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
⊢ φ.emb.comp (algebraMap ↥L ↥φ.carrier) = f.toRingHom

tactic: ext
state_before: case h.e'_5
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
⊢ φ.emb.comp (algebraMap ↥L ↥φ.carrier) = f.toRingHom
state_after: case h.e'_5.a
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
x✝ : ↥L
⊢ (φ.emb.comp (algebraMap ↥L ↥φ.carrier)) x✝ = f.toRingHom x✝

tactic: apply hfφ.2
state_before: case h.e'_5.a
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
x✝ : ↥L
⊢ (φ.emb.comp (algebraMap ↥L ↥φ.carrier)) x✝ = f.toRingHom x✝
state_after: no goals