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

tactic: revert α
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
⊢ IsIntegral F α
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α : ↥(solvableByRad F E)), IsIntegral F α

tactic: apply solvableByRad.induction
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α : ↥(solvableByRad F E)), IsIntegral F α
state_after: case base
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α : F), IsIntegral F ((algebraMap F ↥(solvableByRad F E)) α)

case add
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α β : ↥(solvableByRad F E)), IsIntegral F α → IsIntegral F β → IsIntegral F (α + β)

case neg
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α : ↥(solvableByRad F E)), IsIntegral F α → IsIntegral F (-α)

case mul
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α β : ↥(solvableByRad F E)), IsIntegral F α → IsIntegral F β → IsIntegral F (α * β)

case inv
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α : ↥(solvableByRad F E)), IsIntegral F α → IsIntegral F α⁻¹

case rad
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α : ↥(solvableByRad F E)) (n : ℕ), n ≠ 0 → IsIntegral F (α ^ n) → IsIntegral F α

tactic: exact fun _ => isIntegral_algebraMap
state_before: case base
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α : F), IsIntegral F ((algebraMap F ↥(solvableByRad F E)) α)
state_after: no goals

tactic: exact fun _ _ => IsIntegral.add
state_before: case add
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α β : ↥(solvableByRad F E)), IsIntegral F α → IsIntegral F β → IsIntegral F (α + β)
state_after: no goals

tactic: exact fun _ => IsIntegral.neg
state_before: case neg
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α : ↥(solvableByRad F E)), IsIntegral F α → IsIntegral F (-α)
state_after: no goals

tactic: exact fun _ _ => IsIntegral.mul
state_before: case mul
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α β : ↥(solvableByRad F E)), IsIntegral F α → IsIntegral F β → IsIntegral F (α * β)
state_after: no goals

tactic: intro α hα
state_before: case inv
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α : ↥(solvableByRad F E)), IsIntegral F α → IsIntegral F α⁻¹
state_after: case inv
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
hα : IsIntegral F α
⊢ IsIntegral F α⁻¹

tactic: exact Subalgebra.inv_mem_of_algebraic (integralClosure F (solvableByRad F E))
  (show IsAlgebraic F ↑(⟨α, hα⟩ : integralClosure F (solvableByRad F E)) from hα.isAlgebraic)
state_before: case inv
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
hα : IsIntegral F α
⊢ IsIntegral F α⁻¹
state_after: no goals

tactic: intro α n hn hα
state_before: case rad
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α : E
⊢ ∀ (α : ↥(solvableByRad F E)) (n : ℕ), n ≠ 0 → IsIntegral F (α ^ n) → IsIntegral F α
state_after: case rad
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
n : ℕ
hn : n ≠ 0
hα : IsIntegral F (α ^ n)
⊢ IsIntegral F α

tactic: obtain ⟨p, h1, h2⟩ := hα.isAlgebraic
state_before: case rad
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
n : ℕ
hn : n ≠ 0
hα : IsIntegral F (α ^ n)
⊢ IsIntegral F α
state_after: case rad.intro.intro
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
n : ℕ
hn : n ≠ 0
hα : IsIntegral F (α ^ n)
p : F[X]
h1 : p ≠ 0
h2 : (aeval (α ^ n)) p = 0
⊢ IsIntegral F α

tactic: refine IsAlgebraic.isIntegral ⟨p.comp (X ^ n),
  ⟨fun h => h1 (leadingCoeff_eq_zero.mp ?_), by rw [aeval_comp, aeval_X_pow, h2]⟩⟩
state_before: case rad.intro.intro
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
n : ℕ
hn : n ≠ 0
hα : IsIntegral F (α ^ n)
p : F[X]
h1 : p ≠ 0
h2 : (aeval (α ^ n)) p = 0
⊢ IsIntegral F α
state_after: case rad.intro.intro
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
n : ℕ
hn : n ≠ 0
hα : IsIntegral F (α ^ n)
p : F[X]
h1 : p ≠ 0
h2 : (aeval (α ^ n)) p = 0
h : p.comp (X ^ n) = 0
⊢ p.leadingCoeff = 0

tactic: rwa [← leadingCoeff_eq_zero, leadingCoeff_comp, leadingCoeff_X_pow, one_pow, mul_one] at h
state_before: case rad.intro.intro
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
n : ℕ
hn : n ≠ 0
hα : IsIntegral F (α ^ n)
p : F[X]
h1 : p ≠ 0
h2 : (aeval (α ^ n)) p = 0
h : p.comp (X ^ n) = 0
⊢ p.leadingCoeff = 0
state_after: case rad.intro.intro
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
n : ℕ
hn : n ≠ 0
hα : IsIntegral F (α ^ n)
p : F[X]
h1 : p ≠ 0
h2 : (aeval (α ^ n)) p = 0
h : (p.comp (X ^ n)).leadingCoeff = 0
⊢ (X ^ n).natDegree ≠ 0

tactic: rwa [natDegree_X_pow]
state_before: case rad.intro.intro
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
n : ℕ
hn : n ≠ 0
hα : IsIntegral F (α ^ n)
p : F[X]
h1 : p ≠ 0
h2 : (aeval (α ^ n)) p = 0
h : (p.comp (X ^ n)).leadingCoeff = 0
⊢ (X ^ n).natDegree ≠ 0
state_after: no goals

tactic: rw [aeval_comp, aeval_X_pow, h2]
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
α✝ : E
α : ↥(solvableByRad F E)
n : ℕ
hn : n ≠ 0
hα : IsIntegral F (α ^ n)
p : F[X]
h1 : p ≠ 0
h2 : (aeval (α ^ n)) p = 0
⊢ (aeval α) (p.comp (X ^ n)) = 0
state_after: no goals