Theorem: Polynomial.IsSplittingField.splits_iff
File: Mathlib/FieldTheory/SplittingField/IsSplittingField.lean

tactic: rw [eq_bot_iff, ← adjoin_roots L f, roots_map (algebraMap K L) h, Algebra.adjoin_le_iff]
state_before: F : Type u
K : Type v
L : Type w
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra F K
inst✝² : Algebra F L
inst✝¹ : IsScalarTower F K L
f : K[X]
inst✝ : IsSplittingField K L f
h : Splits (RingHom.id K) f
⊢ ⊤ = ⊥

tactic: intro y hy
state_before: F : Type u
K : Type v
L : Type w
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra F K
inst✝² : Algebra F L
inst✝¹ : IsScalarTower F K L
f : K[X]
inst✝ : IsSplittingField K L f
h : Splits (RingHom.id K) f
⊢ ↑(Multiset.toFinset (Multiset.map (↑(algebraMap K L)) (roots f))) ⊆ ↑⊥

tactic: rw [Multiset.toFinset_map, Finset.mem_coe, Finset.mem_image] at hy
state_before: F : Type u
K : Type v
L : Type w
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra F K
inst✝² : Algebra F L
inst✝¹ : IsScalarTower F K L
f : K[X]
inst✝ : IsSplittingField K L f
h : Splits (RingHom.id K) f
y : L
hy : y ∈ ↑(Multiset.toFinset (Multiset.map (↑(algebraMap K L)) (roots f)))
⊢ y ∈ ↑⊥

tactic: obtain ⟨x : K, -, hxy : algebraMap K L x = y⟩ := hy
state_before: F : Type u
K : Type v
L : Type w
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra F K
inst✝² : Algebra F L
inst✝¹ : IsScalarTower F K L
f : K[X]
inst✝ : IsSplittingField K L f
h : Splits (RingHom.id K) f
y : L
hy✝ : y ∈ ↑(Multiset.toFinset (Multiset.map (↑(algebraMap K L)) (roots f)))
hy : ∃ a, a ∈ Multiset.toFinset (roots f) ∧ ↑(algebraMap K L) a = y
⊢ y ∈ ↑⊥

tactic: rw [← hxy]
state_before: case intro.intro
F : Type u
K : Type v
L : Type w
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra F K
inst✝² : Algebra F L
inst✝¹ : IsScalarTower F K L
f : K[X]
inst✝ : IsSplittingField K L f
h : Splits (RingHom.id K) f
y : L
hy : y ∈ ↑(Multiset.toFinset (Multiset.map (↑(algebraMap K L)) (roots f)))
x : K
hxy : ↑(algebraMap K L) x = y
⊢ y ∈ ↑⊥

tactic: exact SetLike.mem_coe.2 <| Subalgebra.algebraMap_mem _ _
state_before: case intro.intro
F : Type u
K : Type v
L : Type w
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra F K
inst✝² : Algebra F L
inst✝¹ : IsScalarTower F K L
f : K[X]
inst✝ : IsSplittingField K L f
h : Splits (RingHom.id K) f
y : L
hy : y ∈ ↑(Multiset.toFinset (Multiset.map (↑(algebraMap K L)) (roots f)))
x : K
hxy : ↑(algebraMap K L) x = y
⊢ ↑(algebraMap K L) x ∈ ↑⊥

tactic: rw [RingEquiv.toRingHom_trans]
state_before: F : Type u
K : Type v
L : Type w
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra F K
inst✝² : Algebra F L
inst✝¹ : IsScalarTower F K L
f : K[X]
inst✝ : IsSplittingField K L f
h : ⊤ = ⊥
⊢ Splits
    (RingEquiv.toRingHom
      (RingEquiv.trans (RingEquiv.ofBijective (algebraMap K L) (_ : Function.Bijective ↑(algebraMap K L)))
        (RingEquiv.symm (RingEquiv.ofBijective (algebraMap K L) (_ : Function.Bijective ↑(algebraMap K L))))))
    f

tactic: exact splits_comp_of_splits _ _ (splits L f)
state_before: F : Type u
K : Type v
L : Type w
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Field F
inst✝⁴ : Algebra K L
inst✝³ : Algebra F K
inst✝² : Algebra F L
inst✝¹ : IsScalarTower F K L
f : K[X]
inst✝ : IsSplittingField K L f
h : ⊤ = ⊥
⊢ Splits
    (RingHom.comp
      (RingEquiv.toRingHom
        (RingEquiv.symm (RingEquiv.ofBijective (algebraMap K L) (_ : Function.Bijective ↑(algebraMap K L)))))
      (RingEquiv.toRingHom (RingEquiv.ofBijective (algebraMap K L) (_ : Function.Bijective ↑(algebraMap K L)))))
    f