File: Mathlib/FieldTheory/AbelRuffini.lean

full_name: gal_zero_isSolvable
code: theorem gal_zero_isSolvable : IsSolvable (0 : F[X]).Gal 
goal: IsSolvable (Polynomial.Gal 0)

full_name: gal_one_isSolvable
code: theorem gal_one_isSolvable : IsSolvable (1 : F[X]).Gal 
goal: IsSolvable (Polynomial.Gal 1)

full_name: gal_C_isSolvable
code: theorem gal_C_isSolvable (x : F) : IsSolvable (C x).Gal 
goal: IsSolvable (Polynomial.C x).Gal

full_name: gal_X_isSolvable
code: theorem gal_X_isSolvable : IsSolvable (X : F[X]).Gal 
goal: IsSolvable Polynomial.X.Gal

full_name: gal_X_sub_C_isSolvable
code: theorem gal_X_sub_C_isSolvable (x : F) : IsSolvable (X - C x).Gal 
goal: IsSolvable (Polynomial.X - Polynomial.C x).Gal

full_name: gal_X_pow_isSolvable
code: theorem gal_X_pow_isSolvable (n : ℕ) : IsSolvable (X ^ n : F[X]).Gal 
goal: IsSolvable (Polynomial.X ^ n).Gal

full_name: gal_mul_isSolvable
code: theorem gal_mul_isSolvable {p q : F[X]} (_ : IsSolvable p.Gal) (_ : IsSolvable q.Gal) :
    IsSolvable (p * q).Gal 
goal: IsSolvable p.Gal → IsSolvable q.Gal → IsSolvable (p * q).Gal

full_name: gal_prod_isSolvable
code: theorem gal_prod_isSolvable {s : Multiset F[X]} (hs : ∀ p ∈ s, IsSolvable (Gal p)) :
    IsSolvable s.prod.Gal 
goal: IsSolvable s.prod.Gal

full_name: gal_isSolvable_of_splits
code: theorem gal_isSolvable_of_splits {p q : F[X]}
    (_ : Fact (p.Splits (algebraMap F q.SplittingField))) (hq : IsSolvable q.Gal) :
    IsSolvable p.Gal 
goal: Fact (Polynomial.Splits (algebraMap F q.SplittingField) p) → IsSolvable q.Gal → IsSolvable p.Gal

full_name: gal_isSolvable_tower
code: theorem gal_isSolvable_tower (p q : F[X]) (hpq : p.Splits (algebraMap F q.SplittingField))
    (hp : IsSolvable p.Gal) (hq : IsSolvable (q.map (algebraMap F p.SplittingField)).Gal) :
    IsSolvable q.Gal 
goal: IsSolvable q.Gal

full_name: gal_X_pow_sub_one_isSolvable
code: theorem gal_X_pow_sub_one_isSolvable (n : ℕ) : IsSolvable (X ^ n - 1 : F[X]).Gal 
goal: IsSolvable (Polynomial.X ^ n - 1).Gal

full_name: gal_X_pow_sub_C_isSolvable_aux
code: theorem gal_X_pow_sub_C_isSolvable_aux (n : ℕ) (a : F)
    (h : (X ^ n - 1 : F[X]).Splits (RingHom.id F)) : IsSolvable (X ^ n - C a).Gal 
goal: IsSolvable (Polynomial.X ^ n - Polynomial.C a).Gal

full_name: splits_X_pow_sub_one_of_X_pow_sub_C
code: theorem splits_X_pow_sub_one_of_X_pow_sub_C {F : Type*} [Field F] {E : Type*} [Field E]
    (i : F →+* E) (n : ℕ) {a : F} (ha : a ≠ 0) (h : (X ^ n - C a).Splits i) :
    (X ^ n - 1 : F[X]).Splits i 
goal: Polynomial.Splits i (Polynomial.X ^ n - 1)

full_name: gal_X_pow_sub_C_isSolvable
code: theorem gal_X_pow_sub_C_isSolvable (n : ℕ) (x : F) : IsSolvable (X ^ n - C x).Gal 
goal: IsSolvable (Polynomial.X ^ n - Polynomial.C x).Gal

full_name: IsSolvableByRad.add
code: /-- Inductive definition of solvable by radicals -/
inductive IsSolvableByRad : E → Prop
  | base (α : F) : IsSolvableByRad (algebraMap F E α)
  | add (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α + β)
  | neg (α : E) : IsSolvableByRad α → IsSolvableByRad (-α)
  | mul (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α * β)
  | inv (α : E) : IsSolvableByRad α → IsSolvableByRad α⁻¹
  | rad (α : E) (n : ℕ) (hn : n ≠ 0) : IsSolvableByRad (α ^ n) → IsSolvableByRad α
goal: IsSolvableByRad F α → IsSolvableByRad F β → IsSolvableByRad F (α + β)

full_name: IsSolvableByRad.base
code: /-- Inductive definition of solvable by radicals -/
inductive IsSolvableByRad : E → Prop
  | base (α : F) : IsSolvableByRad (algebraMap F E α)
  | add (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α + β)
  | neg (α : E) : IsSolvableByRad α → IsSolvableByRad (-α)
  | mul (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α * β)
  | inv (α : E) : IsSolvableByRad α → IsSolvableByRad α⁻¹
  | rad (α : E) (n : ℕ) (hn : n ≠ 0) : IsSolvableByRad (α ^ n) → IsSolvableByRad α
goal: IsSolvableByRad F ((algebraMap F E) α)

full_name: IsSolvableByRad.rad
code: /-- Inductive definition of solvable by radicals -/
inductive IsSolvableByRad : E → Prop
  | base (α : F) : IsSolvableByRad (algebraMap F E α)
  | add (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α + β)
  | neg (α : E) : IsSolvableByRad α → IsSolvableByRad (-α)
  | mul (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α * β)
  | inv (α : E) : IsSolvableByRad α → IsSolvableByRad α⁻¹
  | rad (α : E) (n : ℕ) (hn : n ≠ 0) : IsSolvableByRad (α ^ n) → IsSolvableByRad α
goal: IsSolvableByRad F (α ^ n) → IsSolvableByRad F α

full_name: IsSolvableByRad.mul
code: /-- Inductive definition of solvable by radicals -/
inductive IsSolvableByRad : E → Prop
  | base (α : F) : IsSolvableByRad (algebraMap F E α)
  | add (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α + β)
  | neg (α : E) : IsSolvableByRad α → IsSolvableByRad (-α)
  | mul (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α * β)
  | inv (α : E) : IsSolvableByRad α → IsSolvableByRad α⁻¹
  | rad (α : E) (n : ℕ) (hn : n ≠ 0) : IsSolvableByRad (α ^ n) → IsSolvableByRad α
goal: IsSolvableByRad F α → IsSolvableByRad F β → IsSolvableByRad F (α * β)

full_name: IsSolvableByRad.inv
code: /-- Inductive definition of solvable by radicals -/
inductive IsSolvableByRad : E → Prop
  | base (α : F) : IsSolvableByRad (algebraMap F E α)
  | add (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α + β)
  | neg (α : E) : IsSolvableByRad α → IsSolvableByRad (-α)
  | mul (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α * β)
  | inv (α : E) : IsSolvableByRad α → IsSolvableByRad α⁻¹
  | rad (α : E) (n : ℕ) (hn : n ≠ 0) : IsSolvableByRad (α ^ n) → IsSolvableByRad α
goal: IsSolvableByRad F α → IsSolvableByRad F α⁻¹

full_name: IsSolvableByRad.neg
code: /-- Inductive definition of solvable by radicals -/
inductive IsSolvableByRad : E → Prop
  | base (α : F) : IsSolvableByRad (algebraMap F E α)
  | add (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α + β)
  | neg (α : E) : IsSolvableByRad α → IsSolvableByRad (-α)
  | mul (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α * β)
  | inv (α : E) : IsSolvableByRad α → IsSolvableByRad α⁻¹
  | rad (α : E) (n : ℕ) (hn : n ≠ 0) : IsSolvableByRad (α ^ n) → IsSolvableByRad α
goal: IsSolvableByRad F α → IsSolvableByRad F (-α)

full_name: IsSolvableByRad
code: /-- Inductive definition of solvable by radicals -/
inductive IsSolvableByRad : E → Prop
  | base (α : F) : IsSolvableByRad (algebraMap F E α)
  | add (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α + β)
  | neg (α : E) : IsSolvableByRad α → IsSolvableByRad (-α)
  | mul (α β : E) : IsSolvableByRad α → IsSolvableByRad β → IsSolvableByRad (α * β)
  | inv (α : E) : IsSolvableByRad α → IsSolvableByRad α⁻¹
  | rad (α : E) (n : ℕ) (hn : n ≠ 0) : IsSolvableByRad (α ^ n) → IsSolvableByRad α
goal: E → Prop

full_name: solvableByRad
code: /-- The intermediate field of solvable-by-radicals elements -/
def solvableByRad : IntermediateField F E 
goal: IntermediateField F E

full_name: solvableByRad.induction
code: theorem induction (P : solvableByRad F E → Prop)
    (base : ∀ α : F, P (algebraMap F (solvableByRad F E) α))
    (add : ∀ α β : solvableByRad F E, P α → P β → P (α + β))
    (neg : ∀ α : solvableByRad F E, P α → P (-α))
    (mul : ∀ α β : solvableByRad F E, P α → P β → P (α * β))
    (inv : ∀ α : solvableByRad F E, P α → P α⁻¹)
    (rad : ∀ α : solvableByRad F E, ∀ n : ℕ, n ≠ 0 → P (α ^ n) → P α) (α : solvableByRad F E) :
    P α 
goal: P α

full_name: solvableByRad.isIntegral
code: theorem isIntegral (α : solvableByRad F E) : IsIntegral F α 
goal: IsIntegral F α

full_name: solvableByRad.P
code: /-- The statement to be proved inductively -/
def P (α : solvableByRad F E) : Prop 
goal: Prop

full_name: solvableByRad.induction3
code: /-- An auxiliary induction lemma, which is generalized by `solvableByRad.isSolvable`. -/
theorem induction3 {α : solvableByRad F E} {n : ℕ} (hn : n ≠ 0) (hα : P (α ^ n)) : P α 
goal: solvableByRad.P α

full_name: solvableByRad.induction2
code: /-- An auxiliary induction lemma, which is generalized by `solvableByRad.isSolvable`. -/
theorem induction2 {α β γ : solvableByRad F E} (hγ : γ ∈ F⟮α, β⟯) (hα : P α) (hβ : P β) : P γ 
goal: solvableByRad.P γ

full_name: solvableByRad.induction1
code: /-- An auxiliary induction lemma, which is generalized by `solvableByRad.isSolvable`. -/
theorem induction1 {α β : solvableByRad F E} (hβ : β ∈ F⟮α⟯) (hα : P α) : P β 
goal: solvableByRad.P β

full_name: solvableByRad.isSolvable
code: theorem isSolvable (α : solvableByRad F E) : IsSolvable (minpoly F α).Gal 
goal: IsSolvable (minpoly F α).Gal

full_name: solvableByRad.isSolvable'
code: /-- **Abel-Ruffini Theorem** (one direction): An irreducible polynomial with an
`IsSolvableByRad` root has solvable Galois group -/
theorem isSolvable' {α : E} {q : F[X]} (q_irred : Irreducible q) (q_aeval : aeval α q = 0)
    (hα : IsSolvableByRad F α) : IsSolvable q.Gal 
goal: IsSolvable q.Gal