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

tactic: by_contra H
state_before: R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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.70499
L : Type ?u.70502
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: 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.70499
L : Type ?u.70502
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.70499
L : Type ?u.70502
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: apply this (natDegree (minpolyDiv R x) + 1)
state_before: R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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.70499
L : Type ?u.70502
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: rw [coeff_eq_zero_of_natDegree_lt]
state_before: R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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.70499
L : Type ?u.70502
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.70499
L : Type ?u.70502
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: intro j
state_before: R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
⊢ ∀ (j : ℕ), (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
state_after: R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
j : ℕ
⊢ (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}

tactic: 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.70499
L : Type ?u.70502
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}
j : ℕ
⊢ (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
state_after: no goals

tactic: exact H
state_before: case zero
R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
⊢ (minpolyDiv R x).coeff (i + 0) ∉ Algebra.adjoin R {x}
state_after: no goals

tactic: intro H
state_before: case succ
R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
j : ℕ
IH : (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
⊢ (minpolyDiv R x).coeff (i + (j + 1)) ∉ Algebra.adjoin R {x}
state_after: case succ
R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
j : ℕ
IH : (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
H : (minpolyDiv R x).coeff (i + (j + 1)) ∈ Algebra.adjoin R {x}
⊢ False

tactic: apply IH
state_before: case succ
R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
j : ℕ
IH : (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
H : (minpolyDiv R x).coeff (i + (j + 1)) ∈ Algebra.adjoin R {x}
⊢ False
state_after: case succ
R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
j : ℕ
IH : (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
H : (minpolyDiv R x).coeff (i + (j + 1)) ∈ Algebra.adjoin R {x}
⊢ (minpolyDiv R x).coeff (i + j) ∈ Algebra.adjoin R {x}

tactic: rw [coeff_minpolyDiv]
state_before: case succ
R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
j : ℕ
IH : (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
H : (minpolyDiv R x).coeff (i + (j + 1)) ∈ Algebra.adjoin R {x}
⊢ (minpolyDiv R x).coeff (i + j) ∈ Algebra.adjoin R {x}
state_after: case succ
R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
j : ℕ
IH : (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
H : (minpolyDiv R x).coeff (i + (j + 1)) ∈ Algebra.adjoin R {x}
⊢ (algebraMap R S) ((minpoly R x).coeff (i + j + 1)) + (minpolyDiv R x).coeff (i + j + 1) * x ∈ Algebra.adjoin R {x}

tactic: refine add_mem ?_ (mul_mem H (Algebra.self_mem_adjoin_singleton R x))
state_before: case succ
R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
j : ℕ
IH : (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
H : (minpolyDiv R x).coeff (i + (j + 1)) ∈ Algebra.adjoin R {x}
⊢ (algebraMap R S) ((minpoly R x).coeff (i + j + 1)) + (minpolyDiv R x).coeff (i + j + 1) * x ∈ Algebra.adjoin R {x}
state_after: case succ
R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
j : ℕ
IH : (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
H : (minpolyDiv R x).coeff (i + (j + 1)) ∈ Algebra.adjoin R {x}
⊢ (algebraMap R S) ((minpoly R x).coeff (i + j + 1)) ∈ Algebra.adjoin R {x}

tactic: exact Subalgebra.algebraMap_mem _ _
state_before: case succ
R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
j : ℕ
IH : (minpolyDiv R x).coeff (i + j) ∉ Algebra.adjoin R {x}
H : (minpolyDiv R x).coeff (i + (j + 1)) ∈ Algebra.adjoin R {x}
⊢ (algebraMap R S) ((minpoly R x).coeff (i + j + 1)) ∈ Algebra.adjoin R {x}
state_after: no goals

tactic: exact zero_mem _
state_before: R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
state_after: no goals

tactic: refine (Nat.le_add_left _ i).trans_lt ?_
state_before: R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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)
state_after: R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
⊢ i + (minpolyDiv R x).natDegree < i + ((minpolyDiv R x).natDegree + 1)

tactic: rw [← add_assoc]
state_before: R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
⊢ i + (minpolyDiv R x).natDegree < i + ((minpolyDiv R x).natDegree + 1)
state_after: R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
⊢ i + (minpolyDiv R x).natDegree < i + (minpolyDiv R x).natDegree + 1

tactic: exact Nat.lt_succ_self _
state_before: R : Type u_2
K : Type ?u.70499
L : Type ?u.70502
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}
⊢ i + (minpolyDiv R x).natDegree < i + (minpolyDiv R x).natDegree + 1
state_after: no goals