Theorem: Polynomial.Gal.mul_splits_in_splittingField_of_mul
File: Mathlib/FieldTheory/PolynomialGaloisGroup.lean

tactic: apply splits_mul
state_before: F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
p₁ q₁ p₂ q₂ : F[X]
hq₁ : q₁ ≠ 0
hq₂ : q₂ ≠ 0
h₁ : Splits (algebraMap F q₁.SplittingField) p₁
h₂ : Splits (algebraMap F q₂.SplittingField) p₂
⊢ Splits (algebraMap F (q₁ * q₂).SplittingField) (p₁ * p₂)
state_after: case hf
F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
p₁ q₁ p₂ q₂ : F[X]
hq₁ : q₁ ≠ 0
hq₂ : q₂ ≠ 0
h₁ : Splits (algebraMap F q₁.SplittingField) p₁
h₂ : Splits (algebraMap F q₂.SplittingField) p₂
⊢ Splits (algebraMap F (q₁ * q₂).SplittingField) p₁

case hg
F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
p₁ q₁ p₂ q₂ : F[X]
hq₁ : q₁ ≠ 0
hq₂ : q₂ ≠ 0
h₁ : Splits (algebraMap F q₁.SplittingField) p₁
h₂ : Splits (algebraMap F q₂.SplittingField) p₂
⊢ Splits (algebraMap F (q₁ * q₂).SplittingField) p₂

tactic: rw [←
  (SplittingField.lift q₁
      (splits_of_splits_of_dvd (algebraMap F (q₁ * q₂).SplittingField) (mul_ne_zero hq₁ hq₂)
        (SplittingField.splits _) (dvd_mul_right q₁ q₂))).comp_algebraMap]
state_before: case hf
F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
p₁ q₁ p₂ q₂ : F[X]
hq₁ : q₁ ≠ 0
hq₂ : q₂ ≠ 0
h₁ : Splits (algebraMap F q₁.SplittingField) p₁
h₂ : Splits (algebraMap F q₂.SplittingField) p₂
⊢ Splits (algebraMap F (q₁ * q₂).SplittingField) p₁
state_after: case hf
F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
p₁ q₁ p₂ q₂ : F[X]
hq₁ : q₁ ≠ 0
hq₂ : q₂ ≠ 0
h₁ : Splits (algebraMap F q₁.SplittingField) p₁
h₂ : Splits (algebraMap F q₂.SplittingField) p₂
⊢ Splits ((↑(SplittingField.lift q₁ ⋯)).comp (algebraMap F q₁.SplittingField)) p₁

tactic: exact splits_comp_of_splits _ _ h₁
state_before: case hf
F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
p₁ q₁ p₂ q₂ : F[X]
hq₁ : q₁ ≠ 0
hq₂ : q₂ ≠ 0
h₁ : Splits (algebraMap F q₁.SplittingField) p₁
h₂ : Splits (algebraMap F q₂.SplittingField) p₂
⊢ Splits ((↑(SplittingField.lift q₁ ⋯)).comp (algebraMap F q₁.SplittingField)) p₁
state_after: no goals

tactic: rw [←
  (SplittingField.lift q₂
      (splits_of_splits_of_dvd (algebraMap F (q₁ * q₂).SplittingField) (mul_ne_zero hq₁ hq₂)
        (SplittingField.splits _) (dvd_mul_left q₂ q₁))).comp_algebraMap]
state_before: case hg
F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
p₁ q₁ p₂ q₂ : F[X]
hq₁ : q₁ ≠ 0
hq₂ : q₂ ≠ 0
h₁ : Splits (algebraMap F q₁.SplittingField) p₁
h₂ : Splits (algebraMap F q₂.SplittingField) p₂
⊢ Splits (algebraMap F (q₁ * q₂).SplittingField) p₂
state_after: case hg
F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
p₁ q₁ p₂ q₂ : F[X]
hq₁ : q₁ ≠ 0
hq₂ : q₂ ≠ 0
h₁ : Splits (algebraMap F q₁.SplittingField) p₁
h₂ : Splits (algebraMap F q₂.SplittingField) p₂
⊢ Splits ((↑(SplittingField.lift q₂ ⋯)).comp (algebraMap F q₂.SplittingField)) p₂

tactic: exact splits_comp_of_splits _ _ h₂
state_before: case hg
F : Type u_1
inst✝² : Field F
p q : F[X]
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
p₁ q₁ p₂ q₂ : F[X]
hq₁ : q₁ ≠ 0
hq₂ : q₂ ≠ 0
h₁ : Splits (algebraMap F q₁.SplittingField) p₁
h₂ : Splits (algebraMap F q₂.SplittingField) p₂
⊢ Splits ((↑(SplittingField.lift q₂ ⋯)).comp (algebraMap F q₂.SplittingField)) p₂
state_after: no goals