Theorem: coeff_minpolyDiv_mem_adjoin
File: Mathlib/FieldTheory/Minpoly/MinpolyDiv.lean

Proof steps:
state_before: R : Type u_2
K : Type ?u.69654
L : Type ?u.69657
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x✝ : S
hx : IsIntegral R x✝
x : S
i : ℕ
⊢ (minpolyDiv R x).coeff i ∈ Algebra.adjoin R {x}
state_after: R : Type u_2
K : Type ?u.69654
L : Type ?u.69657
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x✝ : S
hx : IsIntegral R x✝
x : S
i : ℕ
H : (minpolyDiv R x).coeff i ∉ Algebra.adjoin R {x}
⊢ False
tactic: by_contra H
state_before: R : Type u_2
K : Type ?u.69654
L : Type ?u.69657
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x✝ : S
hx : IsIntegral R x✝
x : S
i : ℕ
H : (minpolyDiv R x).coeff i ∉ Algebra.adjoin R {x}
⊢ False
state_after: R : Type u_2
K : Type ?u.69654
L : Type ?u.69657
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x✝ : S
hx : IsIntegral R x✝
x : S
i : ℕ
H : (minpolyDiv R x).coeff i ∉ Algebra.adjoin R {x}
this : ∀ (j : ℕ), (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
⊢ False
tactic: have : ∀ j, coeff (minpolyDiv R x) (i + j) ∉ Algebra.adjoin R {x} := by
    intro j; induction j with
    | zero => exact H
    | succ j IH =>
      intro H; apply IH
      rw [coeff_minpolyDiv]
      refine add_mem ?_ (mul_mem H (Algebra.self_mem_adjoin_singleton R x))
      exact Subalgebra.algebraMap_mem _ _
state_before: R : Type u_2
K : Type ?u.69654
L : Type ?u.69657
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x✝ : S
hx : IsIntegral R x✝
x : S
i : ℕ
H : (minpolyDiv R x).coeff i ∉ Algebra.adjoin R {x}
this : ∀ (j : ℕ), (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
⊢ False
state_after: R : Type u_2
K : Type ?u.69654
L : Type ?u.69657
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x✝ : S
hx : IsIntegral R x✝
x : S
i : ℕ
H : (minpolyDiv R x).coeff i ∉ Algebra.adjoin R {x}
this : ∀ (j : ℕ), (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
⊢ (minpolyDiv R x).coeff (i + ((minpolyDiv R x).natDegree + 1)) ∈ Algebra.adjoin R {x}
tactic: apply this (natDegree (minpolyDiv R x) + 1)
state_before: R : Type u_2
K : Type ?u.69654
L : Type ?u.69657
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x✝ : S
hx : IsIntegral R x✝
x : S
i : ℕ
H : (minpolyDiv R x).coeff i ∉ Algebra.adjoin R {x}
this : ∀ (j : ℕ), (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
⊢ (minpolyDiv R x).coeff (i + ((minpolyDiv R x).natDegree + 1)) ∈ Algebra.adjoin R {x}
state_after: R : Type u_2
K : Type ?u.69654
L : Type ?u.69657
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x✝ : S
hx : IsIntegral R x✝
x : S
i : ℕ
H : (minpolyDiv R x).coeff i ∉ Algebra.adjoin R {x}
this : ∀ (j : ℕ), (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
⊢ 0 ∈ Algebra.adjoin R {x}

R : Type u_2
K : Type ?u.69654
L : Type ?u.69657
S : Type u_1
inst✝⁵ : CommRing R
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : CommRing S
inst✝¹ : Algebra R S
inst✝ : Algebra K L
x✝ : S
hx : IsIntegral R x✝
x : S
i : ℕ
H : (minpolyDiv R x).coeff i ∉ Algebra.adjoin R {x}
this : ∀ (j : ℕ), (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
⊢ (minpolyDiv R x).natDegree < i + ((minpolyDiv R x).natDegree + 1)
tactic: rw [coeff_eq_zero_of_natDegree_lt]