Theorem: LinearIndependent.finite_of_isNoetherian
File: Mathlib/RingTheory/Noetherian.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
inst✝³ : AddCommGroup P
inst✝² : Module R P
inst✝¹ : IsNoetherian R M
inst✝ : Nontrivial R
ι : Type u_4
v : ι → M
hv : LinearIndependent R v
⊢ Finite ι
state_after: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
inst✝³ : AddCommGroup P
inst✝² : Module R P
inst✝¹ : IsNoetherian R M
inst✝ : Nontrivial R
ι : Type u_4
v : ι → M
hv : LinearIndependent R v
hwf : WellFounded fun x x_1 => x > x_1
⊢ Finite ι
tactic: have hwf := isNoetherian_iff_wellFounded.mp (by infer_instance : IsNoetherian R M)
state_before: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
inst✝³ : AddCommGroup P
inst✝² : Module R P
inst✝¹ : IsNoetherian R M
inst✝ : Nontrivial R
ι : Type u_4
v : ι → M
hv : LinearIndependent R v
hwf : WellFounded fun x x_1 => x > x_1
⊢ Finite ι
state_after: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
inst✝³ : AddCommGroup P
inst✝² : Module R P
inst✝¹ : IsNoetherian R M
inst✝ : Nontrivial R
ι : Type u_4
v : ι → M
hv : LinearIndependent R v
hwf : WellFounded fun x x_1 => x > x_1
i : ι
contra : span R {v i} = ⊥
⊢ False
tactic: refine CompleteLattice.WellFounded.finite_of_independent hwf hv.independent_span_singleton
    fun i contra => ?_
state_before: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
inst✝³ : AddCommGroup P
inst✝² : Module R P
inst✝¹ : IsNoetherian R M
inst✝ : Nontrivial R
ι : Type u_4
v : ι → M
hv : LinearIndependent R v
hwf : WellFounded fun x x_1 => x > x_1
i : ι
contra : span R {v i} = ⊥
⊢ False
state_after: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
inst✝³ : AddCommGroup P
inst✝² : Module R P
inst✝¹ : IsNoetherian R M
inst✝ : Nontrivial R
ι : Type u_4
v : ι → M
hv : LinearIndependent R v
hwf : WellFounded fun x x_1 => x > x_1
i : ι
contra : span R {v i} = ⊥
⊢ v i = 0
tactic: apply hv.ne_zero i
state_before: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
inst✝³ : AddCommGroup P
inst✝² : Module R P
inst✝¹ : IsNoetherian R M
inst✝ : Nontrivial R
ι : Type u_4
v : ι → M
hv : LinearIndependent R v
hwf : WellFounded fun x x_1 => x > x_1
i : ι
contra : span R {v i} = ⊥
⊢ v i = 0
state_after: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
inst✝³ : AddCommGroup P
inst✝² : Module R P
inst✝¹ : IsNoetherian R M
inst✝ : Nontrivial R
ι : Type u_4
v : ι → M
hv : LinearIndependent R v
hwf : WellFounded fun x x_1 => x > x_1
i : ι
contra : span R {v i} = ⊥
this : v i ∈ span R {v i}
⊢ v i = 0
tactic: have : v i ∈ R ∙ v i := Submodule.mem_span_singleton_self (v i)
state_before: R : Type u_1
M : Type u_2
P : Type u_3
N : Type w
inst✝⁸ : Ring R
inst✝⁷ : AddCommGroup M
inst✝⁶ : Module R M
inst✝⁵ : AddCommGroup N
inst✝⁴ : Module R N
inst✝³ : AddCommGroup P
inst✝² : Module R P
inst✝¹ : IsNoetherian R M
inst✝ : Nontrivial R
ι : Type u_4
v : ι → M
hv : LinearIndependent R v
hwf : WellFounded fun x x_1 => x > x_1
i : ι
contra : span R {v i} = ⊥
this : v i ∈ span R {v i}
⊢ v i = 0
state_after: no goals
tactic: rwa [contra, Submodule.mem_bot] at this