Theorem: lift_of_splits
File: Mathlib/RingTheory/Adjoin/Field.lean

tactic: refine' Finset.induction_on s (fun _ => _) fun a s _ ih H => _
state_before: F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s : Finset K
⊢ (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)

tactic: rw [forall_mem_insert] at H
state_before: case refine'_2
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H : ∀ (x : K), x ∈ insert a s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
⊢ Nonempty ({ x // x ∈ Algebra.adjoin F ↑(insert a s) } →ₐ[F] L)

tactic: rcases H with ⟨⟨H1, H2⟩, H3⟩
state_before: case refine'_2
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H :
  (IsIntegral F a ∧ Splits (algebraMap F L) (minpoly F a)) ∧
    ∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
⊢ Nonempty ({ x // x ∈ Algebra.adjoin F ↑(insert a s) } →ₐ[F] L)

tactic: cases' ih H3 with f
state_before: case refine'_2.intro.intro
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H3 : ∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
⊢ Nonempty ({ x // x ∈ Algebra.adjoin F ↑(insert a s) } →ₐ[F] L)

tactic: choose H3 _ using H3
state_before: case refine'_2.intro.intro.intro
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H3 : ∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
⊢ Nonempty ({ x // x ∈ Algebra.adjoin F ↑(insert a s) } →ₐ[F] L)

tactic: rw [coe_insert, Set.insert_eq, Set.union_comm, Algebra.adjoin_union_eq_adjoin_adjoin]
state_before: case refine'_2.intro.intro.intro
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
⊢ Nonempty ({ x // x ∈ Algebra.adjoin F ↑(insert a s) } →ₐ[F] L)

tactic: letI := (f : Algebra.adjoin F (↑s : Set K) →+* L).toAlgebra
state_before: case refine'_2.intro.intro.intro
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
⊢ Nonempty ({ x // x ∈ Subalgebra.restrictScalars F (Algebra.adjoin { x // x ∈ Algebra.adjoin F ↑s } {a}) } →ₐ[F] L)

tactic: haveI : FiniteDimensional F (Algebra.adjoin F (↑s : Set K)) :=
  ((Submodule.fg_iff_finiteDimensional _).1
    (FG_adjoin_of_finite s.finite_toSet H3)).of_subalgebra_toSubmodule
state_before: case refine'_2.intro.intro.intro
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
⊢ Nonempty ({ x // x ∈ Subalgebra.restrictScalars F (Algebra.adjoin { x // x ∈ Algebra.adjoin F ↑s } {a}) } →ₐ[F] L)

tactic: letI := fieldOfFiniteDimensional F (Algebra.adjoin F (↑s : Set K))
state_before: case refine'_2.intro.intro.intro
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this✝ : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
this : FiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
⊢ Nonempty ({ x // x ∈ Subalgebra.restrictScalars F (Algebra.adjoin { x // x ∈ Algebra.adjoin F ↑s } {a}) } →ₐ[F] L)

tactic: have H5 : IsIntegral (Algebra.adjoin F (s : Set K)) a := isIntegral_of_isScalarTower H1
state_before: case refine'_2.intro.intro.intro
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this✝¹ : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
this✝ : FiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
this : Field { x // x ∈ Algebra.adjoin F ↑s } := fieldOfFiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
⊢ Nonempty ({ x // x ∈ Subalgebra.restrictScalars F (Algebra.adjoin { x // x ∈ Algebra.adjoin F ↑s } {a}) } →ₐ[F] L)

tactic: obtain ⟨y, hy⟩ := Polynomial.exists_root_of_splits _ H6 (ne_of_lt (minpoly.degree_pos H5)).symm
state_before: case refine'_2.intro.intro.intro
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this✝¹ : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
this✝ : FiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
this : Field { x // x ∈ Algebra.adjoin F ↑s } := fieldOfFiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
H5 : IsIntegral { x // x ∈ Algebra.adjoin F ↑s } a
H6 : Splits (algebraMap { x // x ∈ Algebra.adjoin F ↑s } L) (minpoly { x // x ∈ Algebra.adjoin F ↑s } a)
⊢ Nonempty ({ x // x ∈ Subalgebra.restrictScalars F (Algebra.adjoin { x // x ∈ Algebra.adjoin F ↑s } {a}) } →ₐ[F] L)

tactic: refine' ⟨Subalgebra.ofRestrictScalars F _ _⟩
state_before: case refine'_2.intro.intro.intro.intro
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this✝¹ : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
this✝ : FiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
this : Field { x // x ∈ Algebra.adjoin F ↑s } := fieldOfFiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
H5 : IsIntegral { x // x ∈ Algebra.adjoin F ↑s } a
H6 : Splits (algebraMap { x // x ∈ Algebra.adjoin F ↑s } L) (minpoly { x // x ∈ Algebra.adjoin F ↑s } a)
y : L
hy : eval₂ (algebraMap { x // x ∈ Algebra.adjoin F ↑s } L) y (minpoly { x // x ∈ Algebra.adjoin F ↑s } a) = 0
⊢ Nonempty ({ x // x ∈ Subalgebra.restrictScalars F (Algebra.adjoin { x // x ∈ Algebra.adjoin F ↑s } {a}) } →ₐ[F] L)

tactic: refine' (AdjoinRoot.liftHom (minpoly (Algebra.adjoin F (↑s : Set K)) a) y hy).comp _
state_before: case refine'_2.intro.intro.intro.intro
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this✝¹ : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
this✝ : FiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
this : Field { x // x ∈ Algebra.adjoin F ↑s } := fieldOfFiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
H5 : IsIntegral { x // x ∈ Algebra.adjoin F ↑s } a
H6 : Splits (algebraMap { x // x ∈ Algebra.adjoin F ↑s } L) (minpoly { x // x ∈ Algebra.adjoin F ↑s } a)
y : L
hy : eval₂ (algebraMap { x // x ∈ Algebra.adjoin F ↑s } L) y (minpoly { x // x ∈ Algebra.adjoin F ↑s } a) = 0
⊢ { x // x ∈ Algebra.adjoin { x // x ∈ Algebra.adjoin F ↑s } {a} } →ₐ[{ x // x ∈ Algebra.adjoin F ↑s }] L

tactic: exact (AlgEquiv.adjoinSingletonEquivAdjoinRootMinpoly
  (Algebra.adjoin F (↑s : Set K)) a).toAlgHom
state_before: case refine'_2.intro.intro.intro.intro
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this✝¹ : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
this✝ : FiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
this : Field { x // x ∈ Algebra.adjoin F ↑s } := fieldOfFiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
H5 : IsIntegral { x // x ∈ Algebra.adjoin F ↑s } a
H6 : Splits (algebraMap { x // x ∈ Algebra.adjoin F ↑s } L) (minpoly { x // x ∈ Algebra.adjoin F ↑s } a)
y : L
hy : eval₂ (algebraMap { x // x ∈ Algebra.adjoin F ↑s } L) y (minpoly { x // x ∈ Algebra.adjoin F ↑s } a) = 0
⊢ { x // x ∈ Algebra.adjoin { x // x ∈ Algebra.adjoin F ↑s } {a} } →ₐ[{ x // x ∈ Algebra.adjoin F ↑s }]
    AdjoinRoot (minpoly { x // x ∈ Algebra.adjoin F ↑s } a)

tactic: rw [coe_empty, Algebra.adjoin_empty]
state_before: case refine'_1
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s : Finset K
x✝ : ∀ (x : K), x ∈ ∅ → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
⊢ Nonempty ({ x // x ∈ Algebra.adjoin F ↑∅ } →ₐ[F] L)

tactic: exact ⟨(Algebra.ofId F L).comp (Algebra.botEquiv F K)⟩
state_before: case refine'_1
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s : Finset K
x✝ : ∀ (x : K), x ∈ ∅ → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)
⊢ Nonempty ({ x // x ∈ ⊥ } →ₐ[F] L)

tactic: have : Polynomial.map (algebraMap F (Algebra.adjoin F (s : Set K))) (minpoly F a) ≠ 0 :=
  Polynomial.map_ne_zero <| minpoly.ne_zero H1
state_before: F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this✝¹ : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
this✝ : FiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
this : Field { x // x ∈ Algebra.adjoin F ↑s } := fieldOfFiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
H5 : IsIntegral { x // x ∈ Algebra.adjoin F ↑s } a
⊢ Splits (algebraMap { x // x ∈ Algebra.adjoin F ↑s } L) (minpoly { x // x ∈ Algebra.adjoin F ↑s } a)

tactic: refine' Polynomial.splits_of_splits_of_dvd _ this
  ((Polynomial.splits_map_iff _ _).2 _) (minpoly.dvd _ _ _)
state_before: F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this✝² : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
this✝¹ : FiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
this✝ : Field { x // x ∈ Algebra.adjoin F ↑s } := fieldOfFiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
H5 : IsIntegral { x // x ∈ Algebra.adjoin F ↑s } a
this : Polynomial.map (algebraMap F { x // x ∈ Algebra.adjoin F ↑s }) (minpoly F a) ≠ 0
⊢ Splits (algebraMap { x // x ∈ Algebra.adjoin F ↑s } L) (minpoly { x // x ∈ Algebra.adjoin F ↑s } a)

tactic: rw [← IsScalarTower.algebraMap_eq]
state_before: case refine'_1
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this✝² : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
this✝¹ : FiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
this✝ : Field { x // x ∈ Algebra.adjoin F ↑s } := fieldOfFiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
H5 : IsIntegral { x // x ∈ Algebra.adjoin F ↑s } a
this : Polynomial.map (algebraMap F { x // x ∈ Algebra.adjoin F ↑s }) (minpoly F a) ≠ 0
⊢ Splits (RingHom.comp (algebraMap { x // x ∈ Algebra.adjoin F ↑s } L) (algebraMap F { x // x ∈ Algebra.adjoin F ↑s }))
    (minpoly F a)

tactic: exact H2
state_before: case refine'_1
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this✝² : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
this✝¹ : FiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
this✝ : Field { x // x ∈ Algebra.adjoin F ↑s } := fieldOfFiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
H5 : IsIntegral { x // x ∈ Algebra.adjoin F ↑s } a
this : Polynomial.map (algebraMap F { x // x ∈ Algebra.adjoin F ↑s }) (minpoly F a) ≠ 0
⊢ Splits (algebraMap F L) (minpoly F a)

tactic: rw [Polynomial.aeval_map_algebraMap, minpoly.aeval]
state_before: case refine'_2
F✝ : Type ?u.30572
inst✝⁵ : Field F✝
F : Type u_1
K : Type u_2
L : Type u_3
inst✝⁴ : Field F
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra F K
inst✝ : Algebra F L
s✝ : Finset K
a : K
s : Finset K
x✝ : ¬a ∈ s
ih :
  (∀ (x : K), x ∈ s → IsIntegral F x ∧ Splits (algebraMap F L) (minpoly F x)) →
    Nonempty ({ x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L)
H1 : IsIntegral F a
H2 : Splits (algebraMap F L) (minpoly F a)
f : { x // x ∈ Algebra.adjoin F ↑s } →ₐ[F] L
H3 : ∀ (x : K), x ∈ s → IsIntegral F x
✝ : ∀ (x : K), x ∈ s → Splits (algebraMap F L) (minpoly F x)
this✝² : Algebra { x // x ∈ Algebra.adjoin F ↑s } L := RingHom.toAlgebra ↑f
this✝¹ : FiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
this✝ : Field { x // x ∈ Algebra.adjoin F ↑s } := fieldOfFiniteDimensional F { x // x ∈ Algebra.adjoin F ↑s }
H5 : IsIntegral { x // x ∈ Algebra.adjoin F ↑s } a
this : Polynomial.map (algebraMap F { x // x ∈ Algebra.adjoin F ↑s }) (minpoly F a) ≠ 0
⊢ ↑(aeval a) (Polynomial.map (algebraMap F { x // x ∈ Algebra.adjoin F ↑s }) (minpoly F a)) = 0