Theorem: solvableByRad.induction2
File: Mathlib/FieldTheory/AbelRuffini.lean

tactic: let p := minpoly F α
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
⊢ P γ
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
⊢ P γ

tactic: let q := minpoly F β
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
⊢ P γ
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
⊢ P γ

tactic: have hpq := Polynomial.splits_of_splits_mul _
  (mul_ne_zero (minpoly.ne_zero (isIntegral α)) (minpoly.ne_zero (isIntegral β)))
  (SplittingField.splits (p * q))
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
⊢ P γ
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
⊢ P γ

tactic: let f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField :=
  Classical.choice <| nonempty_algHom_adjoin_of_splits <| by
    intro x hx
    simp only [Set.mem_insert_iff, Set.mem_singleton_iff] at hx
    cases hx with rw [hx]
    | inl hx => exact ⟨isIntegral α, hpq.1⟩
    | inr hx => exact ⟨isIntegral β, hpq.2⟩
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
⊢ P γ
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ P γ

tactic: have key : minpoly F γ = minpoly F (f ⟨γ, hγ⟩) := by
  refine minpoly.eq_of_irreducible_of_monic
    (minpoly.irreducible (isIntegral γ)) ?_ (minpoly.monic (isIntegral γ))
  suffices aeval (⟨γ, hγ⟩ : F⟮α, β⟯) (minpoly F γ) = 0 by
    rw [aeval_algHom_apply, this, AlgHom.map_zero]
  apply (algebraMap (↥F⟮α, β⟯) (solvableByRad F E)).injective
  simp only [map_zero, _root_.map_eq_zero]
  apply Subtype.val_injective
  erw [Polynomial.aeval_subalgebra_coe (minpoly F γ)]
  simp
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ P γ
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
key : minpoly F γ = minpoly F (f ⟨γ, hγ⟩)
⊢ P γ

tactic: rw [P, key]
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
key : minpoly F γ = minpoly F (f ⟨γ, hγ⟩)
⊢ P γ
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
key : minpoly F γ = minpoly F (f ⟨γ, hγ⟩)
⊢ IsSolvable (minpoly F (f ⟨γ, hγ⟩)).Gal

tactic: refine gal_isSolvable_of_splits ⟨Normal.splits ?_ (f ⟨γ, hγ⟩)⟩ (gal_mul_isSolvable hα hβ)
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
key : minpoly F γ = minpoly F (f ⟨γ, hγ⟩)
⊢ IsSolvable (minpoly F (f ⟨γ, hγ⟩)).Gal
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
key : minpoly F γ = minpoly F (f ⟨γ, hγ⟩)
⊢ Normal F (p * q).SplittingField

tactic: apply SplittingField.instNormal
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
key : minpoly F γ = minpoly F (f ⟨γ, hγ⟩)
⊢ Normal F (p * q).SplittingField
state_after: no goals

tactic: intro x hx
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
⊢ ∀ s ∈ {α, β}, IsIntegral F s ∧ Splits (algebraMap F (p * q).SplittingField) (minpoly F s)
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
x : ↥(solvableByRad F E)
hx : x ∈ {α, β}
⊢ IsIntegral F x ∧ Splits (algebraMap F (p * q).SplittingField) (minpoly F x)

tactic: simp only [Set.mem_insert_iff, Set.mem_singleton_iff] at hx
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
x : ↥(solvableByRad F E)
hx : x ∈ {α, β}
⊢ IsIntegral F x ∧ Splits (algebraMap F (p * q).SplittingField) (minpoly F x)
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
x : ↥(solvableByRad F E)
hx : x = α ∨ x = β
⊢ IsIntegral F x ∧ Splits (algebraMap F (p * q).SplittingField) (minpoly F x)

tactic: cases hx with rw [hx]
| inl hx => exact ⟨isIntegral α, hpq.1⟩
| inr hx => exact ⟨isIntegral β, hpq.2⟩
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
x : ↥(solvableByRad F E)
hx : x = α ∨ x = β
⊢ IsIntegral F x ∧ Splits (algebraMap F (p * q).SplittingField) (minpoly F x)
state_after: no goals

tactic: exact ⟨isIntegral α, hpq.1⟩
state_before: case inl
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
x : ↥(solvableByRad F E)
hx : x = α
⊢ IsIntegral F α ∧ Splits (algebraMap F (p * q).SplittingField) (minpoly F α)
state_after: no goals

tactic: exact ⟨isIntegral β, hpq.2⟩
state_before: case inr
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
x : ↥(solvableByRad F E)
hx : x = β
⊢ IsIntegral F β ∧ Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
state_after: no goals

tactic: refine minpoly.eq_of_irreducible_of_monic
  (minpoly.irreducible (isIntegral γ)) ?_ (minpoly.monic (isIntegral γ))
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ minpoly F γ = minpoly F (f ⟨γ, hγ⟩)
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ (aeval (f ⟨γ, hγ⟩)) (minpoly F γ) = 0

tactic: suffices aeval (⟨γ, hγ⟩ : F⟮α, β⟯) (minpoly F γ) = 0 by
  rw [aeval_algHom_apply, this, AlgHom.map_zero]
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ (aeval (f ⟨γ, hγ⟩)) (minpoly F γ) = 0
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ (aeval ⟨γ, hγ⟩) (minpoly F γ) = 0

tactic: apply (algebraMap (↥F⟮α, β⟯) (solvableByRad F E)).injective
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ (aeval ⟨γ, hγ⟩) (minpoly F γ) = 0
state_after: case a
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ (algebraMap ↥F⟮α, β⟯ ↥(solvableByRad F E)) ((aeval ⟨γ, hγ⟩) (minpoly F γ)) =
    (algebraMap ↥F⟮α, β⟯ ↥(solvableByRad F E)) 0

tactic: simp only [map_zero, _root_.map_eq_zero]
state_before: case a
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ (algebraMap ↥F⟮α, β⟯ ↥(solvableByRad F E)) ((aeval ⟨γ, hγ⟩) (minpoly F γ)) =
    (algebraMap ↥F⟮α, β⟯ ↥(solvableByRad F E)) 0
state_after: case a
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ (aeval ⟨γ, hγ⟩) (minpoly F γ) = 0

tactic: apply Subtype.val_injective
state_before: case a
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ (aeval ⟨γ, hγ⟩) (minpoly F γ) = 0
state_after: case a.a
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ ↑((aeval ⟨γ, hγ⟩) (minpoly F γ)) = ↑0

tactic: erw [Polynomial.aeval_subalgebra_coe (minpoly F γ)]
state_before: case a.a
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ ↑((aeval ⟨γ, hγ⟩) (minpoly F γ)) = ↑0
state_after: case a.a
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ (aeval ↑⟨γ, hγ⟩) (minpoly F γ) = ↑0

tactic: simp
state_before: case a.a
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
⊢ (aeval ↑⟨γ, hγ⟩) (minpoly F γ) = ↑0
state_after: no goals

tactic: rw [aeval_algHom_apply, this, AlgHom.map_zero]
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α β γ : ↥(solvableByRad F E)
hγ : γ ∈ F⟮α, β⟯
hα : P α
hβ : P β
p : F[X] := minpoly F α
q : F[X] := minpoly F β
hpq :
  Splits (algebraMap F (p * q).SplittingField) (minpoly F α) ∧
    Splits (algebraMap F (p * q).SplittingField) (minpoly F β)
f : ↥F⟮α, β⟯ →ₐ[F] (p * q).SplittingField := Classical.choice ⋯
this : (aeval ⟨γ, hγ⟩) (minpoly F γ) = 0
⊢ (aeval (f ⟨γ, hγ⟩)) (minpoly F γ) = 0
state_after: no goals