Theorem: Module.End.exists_hasEigenvalue_of_iSup_genEigenspace_eq_top
File: Mathlib/LinearAlgebra/Eigenspace/Triangularizable.lean

Proof steps:
state_before: K : Type u_1
V : Type u_2
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
R : Type u_3
M : Type u_4
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Nontrivial M
f : End R M
hf : ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⊤
⊢ ∃ μ, f.HasEigenvalue μ
state_after: K : Type u_1
V : Type u_2
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
R : Type u_3
M : Type u_4
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Nontrivial M
f : End R M
hf : ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⊤
contra : ∀ (μ : R), ¬f.HasEigenvalue μ
⊢ False
tactic: by_contra! contra
state_before: K : Type u_1
V : Type u_2
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
R : Type u_3
M : Type u_4
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Nontrivial M
f : End R M
hf : ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⊤
contra : ∀ (μ : R), ¬f.HasEigenvalue μ
⊢ False
state_after: K : Type u_1
V : Type u_2
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
R : Type u_3
M : Type u_4
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Nontrivial M
f : End R M
hf : ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⊤
contra : ∀ (μ : R), ¬f.HasEigenvalue μ
⊢ ∀ (μ : R), ⨆ k, (f.genEigenspace μ) k = ⊥
tactic: suffices ∀ μ, ⨆ k, f.genEigenspace μ k = ⊥ by simp [this] at hf
state_before: K : Type u_1
V : Type u_2
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
R : Type u_3
M : Type u_4
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Nontrivial M
f : End R M
hf : ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⊤
contra : ∀ (μ : R), ¬f.HasEigenvalue μ
⊢ ∀ (μ : R), ⨆ k, (f.genEigenspace μ) k = ⊥
state_after: K : Type u_1
V : Type u_2
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
R : Type u_3
M : Type u_4
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Nontrivial M
f : End R M
hf : ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⊤
contra : ∀ (μ : R), ¬f.HasEigenvalue μ
μ : R
⊢ ⨆ k, (f.genEigenspace μ) k = ⊥
tactic: intro μ
state_before: K : Type u_1
V : Type u_2
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
R : Type u_3
M : Type u_4
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Nontrivial M
f : End R M
hf : ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⊤
contra : ∀ (μ : R), ¬f.HasEigenvalue μ
μ : R
⊢ ⨆ k, (f.genEigenspace μ) k = ⊥
state_after: K : Type u_1
V : Type u_2
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
R : Type u_3
M : Type u_4
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Nontrivial M
f : End R M
hf : ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⊤
μ : R
contra : ∀ (k : ℕ), (f.genEigenspace μ) k = ⊥
⊢ ⨆ k, (f.genEigenspace μ) k = ⊥
tactic: replace contra : ∀ k, f.genEigenspace μ k = ⊥ := fun k ↦ by
    have hk : ¬ f.HasGenEigenvalue μ k := fun hk ↦ contra μ (f.hasEigenvalue_of_hasGenEigenvalue hk)
    rwa [HasGenEigenvalue, not_not] at hk
state_before: K : Type u_1
V : Type u_2
inst✝⁶ : Field K
inst✝⁵ : AddCommGroup V
inst✝⁴ : Module K V
R : Type u_3
M : Type u_4
inst✝³ : CommRing R
inst✝² : AddCommGroup M
inst✝¹ : Module R M
inst✝ : Nontrivial M
f : End R M
hf : ⨆ μ, ⨆ k, (f.genEigenspace μ) k = ⊤
μ : R
contra : ∀ (k : ℕ), (f.genEigenspace μ) k = ⊥
⊢ ⨆ k, (f.genEigenspace μ) k = ⊥
state_after: no goals
tactic: simp [contra]