Theorem: PowerBasis.dim_le_natDegree_of_root
File: Mathlib/RingTheory/PowerBasis.lean

tactic: refine' le_of_not_lt fun hlt => ne_zero _
state_before: R : Type ?u.115843
S : Type u_2
T : Type ?u.115849
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
A : Type u_1
B : Type ?u.116155
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : IsDomain B
inst✝² : Algebra A B
K : Type ?u.116577
inst✝¹ : Field K
inst✝ : Algebra A S
pb : PowerBasis A S
p : A[X]
ne_zero : p ≠ 0
root : ↑(aeval pb.gen) p = 0
⊢ pb.dim ≤ natDegree p

tactic: rw [p.as_sum_range' _ hlt, Finset.sum_range]
state_before: R : Type ?u.115843
S : Type u_2
T : Type ?u.115849
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
A : Type u_1
B : Type ?u.116155
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : IsDomain B
inst✝² : Algebra A B
K : Type ?u.116577
inst✝¹ : Field K
inst✝ : Algebra A S
pb : PowerBasis A S
p : A[X]
ne_zero : p ≠ 0
root : ↑(aeval pb.gen) p = 0
hlt : natDegree p < pb.dim
⊢ p = 0

tactic: refine' Fintype.sum_eq_zero _ fun i => _
state_before: R : Type ?u.115843
S : Type u_2
T : Type ?u.115849
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
A : Type u_1
B : Type ?u.116155
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : IsDomain B
inst✝² : Algebra A B
K : Type ?u.116577
inst✝¹ : Field K
inst✝ : Algebra A S
pb : PowerBasis A S
p : A[X]
ne_zero : p ≠ 0
root : ↑(aeval pb.gen) p = 0
hlt : natDegree p < pb.dim
⊢ ∑ i : Fin pb.dim, ↑(monomial ↑i) (coeff p ↑i) = 0

tactic: simp_rw [aeval_eq_sum_range' hlt, Finset.sum_range, ← pb.basis_eq_pow] at root
state_before: R : Type ?u.115843
S : Type u_2
T : Type ?u.115849
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
A : Type u_1
B : Type ?u.116155
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : IsDomain B
inst✝² : Algebra A B
K : Type ?u.116577
inst✝¹ : Field K
inst✝ : Algebra A S
pb : PowerBasis A S
p : A[X]
ne_zero : p ≠ 0
root : ↑(aeval pb.gen) p = 0
hlt : natDegree p < pb.dim
i : Fin pb.dim
⊢ ↑(monomial ↑i) (coeff p ↑i) = 0

tactic: have := Fintype.linearIndependent_iff.1 pb.basis.linearIndependent _ root
state_before: R : Type ?u.115843
S : Type u_2
T : Type ?u.115849
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
A : Type u_1
B : Type ?u.116155
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : IsDomain B
inst✝² : Algebra A B
K : Type ?u.116577
inst✝¹ : Field K
inst✝ : Algebra A S
pb : PowerBasis A S
p : A[X]
ne_zero : p ≠ 0
hlt : natDegree p < pb.dim
i : Fin pb.dim
root : ∑ x : Fin pb.dim, coeff p ↑x • ↑pb.basis x = 0
⊢ ↑(monomial ↑i) (coeff p ↑i) = 0

tactic: dsimp only at this
state_before: R : Type ?u.115843
S : Type u_2
T : Type ?u.115849
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
A : Type u_1
B : Type ?u.116155
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : IsDomain B
inst✝² : Algebra A B
K : Type ?u.116577
inst✝¹ : Field K
inst✝ : Algebra A S
pb : PowerBasis A S
p : A[X]
ne_zero : p ≠ 0
hlt : natDegree p < pb.dim
i : Fin pb.dim
root : ∑ x : Fin pb.dim, coeff p ↑x • ↑pb.basis x = 0
this : ∀ (i : Fin pb.dim), coeff p ↑i = 0
⊢ ↑(monomial ↑i) (coeff p ↑i) = 0

tactic: rw [this, monomial_zero_right]
state_before: R : Type ?u.115843
S : Type u_2
T : Type ?u.115849
inst✝⁸ : CommRing R
inst✝⁷ : Ring S
inst✝⁶ : Algebra R S
A : Type u_1
B : Type ?u.116155
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : IsDomain B
inst✝² : Algebra A B
K : Type ?u.116577
inst✝¹ : Field K
inst✝ : Algebra A S
pb : PowerBasis A S
p : A[X]
ne_zero : p ≠ 0
hlt : natDegree p < pb.dim
i : Fin pb.dim
root : ∑ x : Fin pb.dim, coeff p ↑x • ↑pb.basis x = 0
this : ∀ (i : Fin pb.dim), coeff p ↑i = 0
⊢ ↑(monomial ↑i) (coeff p ↑i) = 0