linear_algebra.eigenspace.is_alg_closedMathlib.LinearAlgebra.Eigenspace.Triangularizable

This file has been ported!

Changes since the initial port

The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(last sync)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -64,7 +64,7 @@ theorem iSup_generalizedEigenspace_eq_top [IsAlgClosed K] [FiniteDimensional K V
   cases n
   -- If the vector space is 0-dimensional, the result is trivial.
   · rw [← top_le_iff]
-    simp only [finrank_eq_zero.1 (Eq.trans (finrank_top _ _) h_dim), bot_le]
+    simp only [Submodule.finrank_eq_zero.1 (Eq.trans (finrank_top _ _) h_dim), bot_le]
   -- Otherwise the vector space is nontrivial.
   · haveI : Nontrivial V := finrank_pos_iff.1 (by rw [h_dim]; apply Nat.zero_lt_succ)
     -- Hence, `f` has an eigenvalue `μ₀`.
Diff
@@ -3,8 +3,8 @@ Copyright (c) 2020 Alexander Bentkamp. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Alexander Bentkamp
 -/
-import Mathbin.LinearAlgebra.Eigenspace.Basic
-import Mathbin.FieldTheory.IsAlgClosed.Spectrum
+import LinearAlgebra.Eigenspace.Basic
+import FieldTheory.IsAlgClosed.Spectrum
 
 #align_import linear_algebra.eigenspace.is_alg_closed from "leanprover-community/mathlib"@"660b3a2db3522fa0db036e569dc995a615c4c848"
 
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2020 Alexander Bentkamp. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Alexander Bentkamp
-
-! This file was ported from Lean 3 source module linear_algebra.eigenspace.is_alg_closed
-! leanprover-community/mathlib commit 660b3a2db3522fa0db036e569dc995a615c4c848
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathbin.LinearAlgebra.Eigenspace.Basic
 import Mathbin.FieldTheory.IsAlgClosed.Spectrum
 
+#align_import linear_algebra.eigenspace.is_alg_closed from "leanprover-community/mathlib"@"660b3a2db3522fa0db036e569dc995a615c4c848"
+
 /-!
 # Eigenvectors and eigenvalues over algebraically closed fields.
 
Diff
@@ -57,6 +57,7 @@ noncomputable instance [IsAlgClosed K] [FiniteDimensional K V] [Nontrivial V] (f
     Inhabited f.Eigenvalues :=
   ⟨⟨f.exists_eigenvalue.some, f.exists_eigenvalue.choose_spec⟩⟩
 
+#print Module.End.iSup_generalizedEigenspace_eq_top /-
 /-- The generalized eigenvectors span the entire vector space (Lemma 8.21 of [axler2015]). -/
 theorem iSup_generalizedEigenspace_eq_top [IsAlgClosed K] [FiniteDimensional K V] (f : End K V) :
     (⨆ (μ : K) (k : ℕ), f.generalizedEigenspace μ k) = ⊤ :=
@@ -122,6 +123,7 @@ theorem iSup_generalizedEigenspace_eq_top [IsAlgClosed K] [FiniteDimensional K V
     · rw [← top_le_iff, ← Submodule.eq_top_of_disjoint ER ES h_dim_add h_disjoint]
       apply sup_le hER hES
 #align module.End.supr_generalized_eigenspace_eq_top Module.End.iSup_generalizedEigenspace_eq_top
+-/
 
 end End
 
Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Alexander Bentkamp
 
 ! This file was ported from Lean 3 source module linear_algebra.eigenspace.is_alg_closed
-! leanprover-community/mathlib commit 6b0169218d01f2837d79ea2784882009a0da1aa1
+! leanprover-community/mathlib commit 660b3a2db3522fa0db036e569dc995a615c4c848
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -14,6 +14,9 @@ import Mathbin.FieldTheory.IsAlgClosed.Spectrum
 /-!
 # Eigenvectors and eigenvalues over algebraically closed fields.
 
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
 * Every linear operator on a vector space over an algebraically closed field has an eigenvalue.
 * The generalized eigenvectors span the entire vector space.
 
Diff
@@ -38,6 +38,7 @@ open FiniteDimensional
 
 variable {K : Type v} {V : Type w} [Field K] [AddCommGroup V] [Module K V]
 
+#print Module.End.exists_eigenvalue /-
 -- This is Lemma 5.21 of [axler2015], although we are no longer following that proof.
 /-- Every linear operator on a vector space over an algebraically closed field has
     an eigenvalue. -/
@@ -47,6 +48,7 @@ theorem exists_eigenvalue [IsAlgClosed K] [FiniteDimensional K V] [Nontrivial V]
   simp_rw [has_eigenvalue_iff_mem_spectrum]
   exact spectrum.nonempty_of_isAlgClosed_of_finiteDimensional K f
 #align module.End.exists_eigenvalue Module.End.exists_eigenvalue
+-/
 
 noncomputable instance [IsAlgClosed K] [FiniteDimensional K V] [Nontrivial V] (f : End K V) :
     Inhabited f.Eigenvalues :=

Changes in mathlib4

mathlib3
mathlib4
chore: adapt to multiple goal linter 2 (#12361)

A PR analogous to #12338: reformatting proofs following the multiple goals linter of #12339.

Diff
@@ -140,7 +140,8 @@ theorem inf_iSup_generalizedEigenspace [FiniteDimensional K V] (h : ∀ x ∈ p,
   suffices ∀ μ, (m μ : V) ∈ p by
     exact (mem_iSup_iff_exists_finsupp _ _).mpr ⟨m, fun μ ↦ mem_inf.mp ⟨this μ, hm₂ μ⟩, rfl⟩
   intro μ
-  by_cases hμ : μ ∈ m.support; swap; simp only [Finsupp.not_mem_support_iff.mp hμ, p.zero_mem]
+  by_cases hμ : μ ∈ m.support; swap
+  · simp only [Finsupp.not_mem_support_iff.mp hμ, p.zero_mem]
   have h_comm : ∀ (μ₁ μ₂ : K),
     Commute ((f - algebraMap K (End K V) μ₁) ^ finrank K V)
             ((f - algebraMap K (End K V) μ₂) ^ finrank K V) := fun μ₁ μ₂ ↦
chore: prepare Lean version bump with explicit simp (#10999)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -84,7 +84,7 @@ theorem iSup_generalizedEigenspace_eq_top [IsAlgClosed K] [FiniteDimensional K V
     let f' : End K ER := f.restrict h_f_ER
     -- The dimension of `ES` is positive
     have h_dim_ES_pos : 0 < finrank K ES := by
-      dsimp only
+      dsimp only [ES]
       rw [h_dim]
       apply pos_finrank_generalizedEigenspace_of_hasEigenvalue hμ₀ (Nat.zero_lt_succ n)
     -- and the dimensions of `ES` and `ER` add up to `finrank K V`.
chore: Generalize results on finrank to rings. (#8912)

A portion of results in Mathlib/LinearAlgebra/FiniteDimensional.lean were generalized to rings and moved to Mathlib/LinearAlgebra/FreeModule/Finite/Rank.lean. Most API lemmas for FiniteDimensional are kept but replaced with one lemma proofs. Definitions and niche lemmas are replaced by the generalized version completely.

Co-authored-by: erd1 <the.erd.one@gmail.com> Co-authored-by: Andrew Yang <the.erd.one@gmail.com>

Diff
@@ -68,7 +68,7 @@ theorem iSup_generalizedEigenspace_eq_top [IsAlgClosed K] [FiniteDimensional K V
   cases' n with n
   -- If the vector space is 0-dimensional, the result is trivial.
   · rw [← top_le_iff]
-    simp only [finrank_eq_zero.1 (Eq.trans (finrank_top _ _) h_dim), bot_le]
+    simp only [Submodule.finrank_eq_zero.1 (Eq.trans (finrank_top _ _) h_dim), bot_le]
   -- Otherwise the vector space is nontrivial.
   · haveI : Nontrivial V := finrank_pos_iff.1 (by rw [h_dim]; apply Nat.zero_lt_succ)
     -- Hence, `f` has an eigenvalue `μ₀`.
chore: tidy various files (#8818)
Diff
@@ -154,7 +154,8 @@ theorem inf_iSup_generalizedEigenspace [FiniteDimensional K V] (h : ∀ x ∈ p,
       rw [map_finsupp_sum, Finsupp.sum_congr (g2 := fun μ' _ ↦ if μ' = μ then g (m μ) else 0) this,
         Finsupp.sum_ite_eq', if_pos hμ]
     rintro μ' hμ'
-    split_ifs with hμμ'; rw [hμμ']
+    split_ifs with hμμ'
+    · rw [hμμ']
     replace hm₂ : ((f - algebraMap K (End K V) μ') ^ finrank K V) (m μ') = 0 := by
       obtain ⟨k, hk⟩ := (mem_iSup_of_chain _ _).mp (hm₂ μ')
       exact Module.End.generalizedEigenspace_le_generalizedEigenspace_finrank _ _ k hk
feat: in finite dimensions, if a linear endomorphism is triangularizable, so is its restriction to any invariant submodule (#8212)
Diff
@@ -13,33 +13,41 @@ import Mathlib.FieldTheory.IsAlgClosed.Spectrum
 
 This file contains basic results relevant to the triangularizability of linear endomorphisms.
 
-* Every linear operator on a vector space over an algebraically closed field has an eigenvalue.
-* The generalized eigenvectors span the entire vector space.
+## Main definitions / results
+
+ * `Module.End.exists_eigenvalue`: in finite dimensions, over an algebraically closed field, every
+   linear endomorphism has an eigenvalue.
+ * `Module.End.iSup_generalizedEigenspace_eq_top`: in finite dimensions, over an algebraically
+   closed field, the generalized eigenspaces of any linear endomorphism span the whole space.
+ * `Module.End.iSup_generalizedEigenspace_restrict_eq_top`: in finite dimensions, if the
+   generalized eigenspaces of a linear endomorphism span the whole space then the same is true of
+   its restriction to any invariant submodule.
 
 ## References
 
 * [Sheldon Axler, *Linear Algebra Done Right*][axler2015]
 * https://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors
 
+## TODO
+
+Define triangularizable endomorphisms (e.g., as existence of a maximal chain of invariant subspaces)
+and prove that in finite dimensions over a field, this is equivalent to the property that the
+generalized eigenspaces span the whole space.
+
 ## Tags
 
 eigenspace, eigenvector, eigenvalue, eigen
 -/
 
+open Set Function Module FiniteDimensional
 
-universe u v w
-
-namespace Module
+variable {K V : Type*} [Field K] [AddCommGroup V] [Module K V]
 
-namespace End
-
-open FiniteDimensional
-
-variable {K : Type v} {V : Type w} [Field K] [AddCommGroup V] [Module K V]
+namespace Module.End
 
 -- This is Lemma 5.21 of [axler2015], although we are no longer following that proof.
-/-- Every linear operator on a vector space over an algebraically closed field has
-    an eigenvalue. -/
+/-- In finite dimensions, over an algebraically closed field, every linear endomorphism has an
+eigenvalue. -/
 theorem exists_eigenvalue [IsAlgClosed K] [FiniteDimensional K V] [Nontrivial V] (f : End K V) :
     ∃ c : K, f.HasEigenvalue c := by
   simp_rw [hasEigenvalue_iff_mem_spectrum]
@@ -50,7 +58,9 @@ noncomputable instance [IsAlgClosed K] [FiniteDimensional K V] [Nontrivial V] (f
     Inhabited f.Eigenvalues :=
   ⟨⟨f.exists_eigenvalue.choose, f.exists_eigenvalue.choose_spec⟩⟩
 
-/-- The generalized eigenvectors span the entire vector space (Lemma 8.21 of [axler2015]). -/
+-- Lemma 8.21 of [axler2015]
+/-- In finite dimensions, over an algebraically closed field, the generalized eigenspaces of any
+linear endomorphism span the whole space. -/
 theorem iSup_generalizedEigenspace_eq_top [IsAlgClosed K] [FiniteDimensional K V] (f : End K V) :
     ⨆ (μ : K) (k : ℕ), f.generalizedEigenspace μ k = ⊤ := by
   -- We prove the claim by strong induction on the dimension of the vector space.
@@ -113,6 +123,87 @@ theorem iSup_generalizedEigenspace_eq_top [IsAlgClosed K] [FiniteDimensional K V
       apply sup_le hER hES
 #align module.End.supr_generalized_eigenspace_eq_top Module.End.iSup_generalizedEigenspace_eq_top
 
-end End
-
-end Module
+end Module.End
+
+namespace Submodule
+
+variable {p : Submodule K V} {f : Module.End K V}
+
+theorem inf_iSup_generalizedEigenspace [FiniteDimensional K V] (h : ∀ x ∈ p, f x ∈ p) :
+    p ⊓ ⨆ μ, ⨆ k, f.generalizedEigenspace μ k = ⨆ μ, ⨆ k, p ⊓ f.generalizedEigenspace μ k := by
+  simp_rw [← (f.generalizedEigenspace _).mono.directed_le.inf_iSup_eq]
+  refine le_antisymm (fun m hm ↦ ?_)
+    (le_inf_iff.mpr ⟨iSup_le fun μ ↦ inf_le_left, iSup_mono fun μ ↦ inf_le_right⟩)
+  classical
+  obtain ⟨hm₀ : m ∈ p, hm₁ : m ∈ ⨆ μ, ⨆ k, f.generalizedEigenspace μ k⟩ := hm
+  obtain ⟨m, hm₂, rfl⟩ := (mem_iSup_iff_exists_finsupp _ _).mp hm₁
+  suffices ∀ μ, (m μ : V) ∈ p by
+    exact (mem_iSup_iff_exists_finsupp _ _).mpr ⟨m, fun μ ↦ mem_inf.mp ⟨this μ, hm₂ μ⟩, rfl⟩
+  intro μ
+  by_cases hμ : μ ∈ m.support; swap; simp only [Finsupp.not_mem_support_iff.mp hμ, p.zero_mem]
+  have h_comm : ∀ (μ₁ μ₂ : K),
+    Commute ((f - algebraMap K (End K V) μ₁) ^ finrank K V)
+            ((f - algebraMap K (End K V) μ₂) ^ finrank K V) := fun μ₁ μ₂ ↦
+    ((Commute.sub_right rfl <| Algebra.commute_algebraMap_right _ _).sub_left
+      (Algebra.commute_algebraMap_left _ _)).pow_pow _ _
+  let g : End K V := (m.support.erase μ).noncommProd _ fun μ₁ _ μ₂ _ _ ↦ h_comm μ₁ μ₂
+  have hfg : Commute f g := Finset.noncommProd_commute _ _ _ _ fun μ' _ ↦
+    (Commute.sub_right rfl <| Algebra.commute_algebraMap_right _ _).pow_right _
+  have hg₀ : g (m.sum fun _μ mμ ↦ mμ) = g (m μ) := by
+    suffices ∀ μ' ∈ m.support, g (m μ') = if μ' = μ then g (m μ) else 0 by
+      rw [map_finsupp_sum, Finsupp.sum_congr (g2 := fun μ' _ ↦ if μ' = μ then g (m μ) else 0) this,
+        Finsupp.sum_ite_eq', if_pos hμ]
+    rintro μ' hμ'
+    split_ifs with hμμ'; rw [hμμ']
+    replace hm₂ : ((f - algebraMap K (End K V) μ') ^ finrank K V) (m μ') = 0 := by
+      obtain ⟨k, hk⟩ := (mem_iSup_of_chain _ _).mp (hm₂ μ')
+      exact Module.End.generalizedEigenspace_le_generalizedEigenspace_finrank _ _ k hk
+    have : _ = g := (m.support.erase μ).noncommProd_erase_mul (Finset.mem_erase.mpr ⟨hμμ', hμ'⟩)
+      (fun μ ↦ (f - algebraMap K (End K V) μ) ^ finrank K V) (fun μ₁ _ μ₂ _ _ ↦ h_comm μ₁ μ₂)
+    rw [← this, LinearMap.mul_apply, hm₂, _root_.map_zero]
+  have hg₁ : MapsTo g p p := Finset.noncommProd_induction _ _ _ (fun g' : End K V ↦ MapsTo g' p p)
+      (fun f₁ f₂ ↦ MapsTo.comp) (mapsTo_id _) fun μ' _ ↦ by
+    suffices MapsTo (f - algebraMap K (End K V) μ') p p by
+      simp only [LinearMap.coe_pow]; exact this.iterate (finrank K V)
+    intro x hx
+    rw [LinearMap.sub_apply, algebraMap_end_apply]
+    exact p.sub_mem (h _ hx) (smul_mem p μ' hx)
+  have hg₂ : MapsTo g ↑(⨆ k, f.generalizedEigenspace μ k) ↑(⨆ k, f.generalizedEigenspace μ k) :=
+    f.mapsTo_iSup_generalizedEigenspace_of_comm hfg μ
+  have hg₃ : InjOn g ↑(⨆ k, f.generalizedEigenspace μ k) := by
+    apply LinearMap.injOn_of_disjoint_ker (subset_refl _)
+    have this := f.independent_generalizedEigenspace
+    simp_rw [f.iSup_generalizedEigenspace_eq_generalizedEigenspace_finrank] at this ⊢
+    rw [LinearMap.ker_noncommProd_eq_of_supIndep_ker _ _ <| this.supIndep' (m.support.erase μ),
+      ← Finset.sup_eq_iSup]
+    exact Finset.supIndep_iff_disjoint_erase.mp (this.supIndep' m.support) μ hμ
+  have hg₄ : SurjOn g
+      ↑(p ⊓ ⨆ k, f.generalizedEigenspace μ k) ↑(p ⊓ ⨆ k, f.generalizedEigenspace μ k) := by
+    have : MapsTo g
+        ↑(p ⊓ ⨆ k, f.generalizedEigenspace μ k) ↑(p ⊓ ⨆ k, f.generalizedEigenspace μ k) :=
+      hg₁.inter_inter hg₂
+    rw [← LinearMap.injOn_iff_surjOn this]
+    exact hg₃.mono (inter_subset_right _ _)
+  specialize hm₂ μ
+  obtain ⟨y, ⟨hy₀ : y ∈ p, hy₁ : y ∈ ⨆ k, f.generalizedEigenspace μ k⟩, hy₂ : g y = g (m μ)⟩ :=
+    hg₄ ⟨(hg₀ ▸ hg₁ hm₀), hg₂ hm₂⟩
+  rwa [← hg₃ hy₁ hm₂ hy₂]
+
+theorem eq_iSup_inf_generalizedEigenspace [FiniteDimensional K V]
+    (h : ∀ x ∈ p, f x ∈ p) (h' : ⨆ μ, ⨆ k, f.generalizedEigenspace μ k = ⊤) :
+    p = ⨆ μ, ⨆ k, p ⊓ f.generalizedEigenspace μ k := by
+  rw [← inf_iSup_generalizedEigenspace h, h', inf_top_eq]
+
+end Submodule
+
+/-- In finite dimensions, if the generalized eigenspaces of a linear endomorphism span the whole
+space then the same is true of its restriction to any invariant submodule. -/
+theorem Module.End.iSup_generalizedEigenspace_restrict_eq_top
+    {p : Submodule K V} {f : Module.End K V} [FiniteDimensional K V]
+    (h : ∀ x ∈ p, f x ∈ p) (h' : ⨆ μ, ⨆ k, f.generalizedEigenspace μ k = ⊤) :
+    ⨆ μ, ⨆ k, Module.End.generalizedEigenspace (LinearMap.restrict f h) μ k = ⊤ := by
+  have := congr_arg (Submodule.comap p.subtype) (Submodule.eq_iSup_inf_generalizedEigenspace h h')
+  have h_inj : Function.Injective p.subtype := Subtype.coe_injective
+  simp_rw [Submodule.inf_generalizedEigenspace f p h, Submodule.comap_subtype_self,
+    ← Submodule.map_iSup, Submodule.comap_map_eq_of_injective h_inj] at this
+  exact this.symm
chore: rename LinearAlgebra.Eigenspace.IsAlgClosed to LinearAlgebra.Eigenspace.Triangularizable (#8318)

The motivation is that I wish to add further results about triangularizability of linear endomorphisms and I claim this file is a natural home.

This rename-only PR exists to prevent breaking 'nightly-testing'.

Diff
@@ -9,7 +9,9 @@ import Mathlib.FieldTheory.IsAlgClosed.Spectrum
 #align_import linear_algebra.eigenspace.is_alg_closed from "leanprover-community/mathlib"@"6b0169218d01f2837d79ea2784882009a0da1aa1"
 
 /-!
-# Eigenvectors and eigenvalues over algebraically closed fields.
+# Triangularizable linear endomorphisms
+
+This file contains basic results relevant to the triangularizability of linear endomorphisms.
 
 * Every linear operator on a vector space over an algebraically closed field has an eigenvalue.
 * The generalized eigenvectors span the entire vector space.
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2020 Alexander Bentkamp. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Alexander Bentkamp
-
-! This file was ported from Lean 3 source module linear_algebra.eigenspace.is_alg_closed
-! leanprover-community/mathlib commit 6b0169218d01f2837d79ea2784882009a0da1aa1
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.LinearAlgebra.Eigenspace.Basic
 import Mathlib.FieldTheory.IsAlgClosed.Spectrum
 
+#align_import linear_algebra.eigenspace.is_alg_closed from "leanprover-community/mathlib"@"6b0169218d01f2837d79ea2784882009a0da1aa1"
+
 /-!
 # Eigenvectors and eigenvalues over algebraically closed fields.
 
fix: precedences of ⨆⋃⋂⨅ (#5614)
Diff
@@ -53,7 +53,7 @@ noncomputable instance [IsAlgClosed K] [FiniteDimensional K V] [Nontrivial V] (f
 
 /-- The generalized eigenvectors span the entire vector space (Lemma 8.21 of [axler2015]). -/
 theorem iSup_generalizedEigenspace_eq_top [IsAlgClosed K] [FiniteDimensional K V] (f : End K V) :
-    (⨆ (μ : K) (k : ℕ), f.generalizedEigenspace μ k) = ⊤ := by
+    ⨆ (μ : K) (k : ℕ), f.generalizedEigenspace μ k = ⊤ := by
   -- We prove the claim by strong induction on the dimension of the vector space.
   induction' h_dim : finrank K V using Nat.strong_induction_on with n ih generalizing V
   cases' n with n
@@ -84,11 +84,11 @@ theorem iSup_generalizedEigenspace_eq_top [IsAlgClosed K] [FiniteDimensional K V
     -- Therefore the dimension `ER` mus be smaller than `finrank K V`.
     have h_dim_ER : finrank K ER < n.succ := by linarith
     -- This allows us to apply the induction hypothesis on `ER`:
-    have ih_ER : (⨆ (μ : K) (k : ℕ), f'.generalizedEigenspace μ k) = ⊤ :=
+    have ih_ER : ⨆ (μ : K) (k : ℕ), f'.generalizedEigenspace μ k = ⊤ :=
       ih (finrank K ER) h_dim_ER f' rfl
     -- The induction hypothesis gives us a statement about subspaces of `ER`. We can transfer this
     -- to a statement about subspaces of `V` via `submodule.subtype`:
-    have ih_ER' : (⨆ (μ : K) (k : ℕ), (f'.generalizedEigenspace μ k).map ER.subtype) = ER := by
+    have ih_ER' : ⨆ (μ : K) (k : ℕ), (f'.generalizedEigenspace μ k).map ER.subtype = ER := by
       simp only [(Submodule.map_iSup _ _).symm, ih_ER, Submodule.map_subtype_top ER]
     -- Moreover, every generalized eigenspace of `f'` is contained in the corresponding generalized
     -- eigenspace of `f`.
@@ -109,7 +109,7 @@ theorem iSup_generalizedEigenspace_eq_top [IsAlgClosed K] [FiniteDimensional K V
     have h_disjoint : Disjoint ER ES := generalized_eigenvec_disjoint_range_ker f μ₀
     -- Since the dimensions of `ER` and `ES` add up to the dimension of `V`, it follows that the
     -- span of all generalized eigenvectors is all of `V`.
-    show (⨆ (μ : K) (k : ℕ), f.generalizedEigenspace μ k) = ⊤
+    show ⨆ (μ : K) (k : ℕ), f.generalizedEigenspace μ k = ⊤
     · rw [← top_le_iff, ← Submodule.eq_top_of_disjoint ER ES h_dim_add h_disjoint]
       apply sup_le hER hES
 #align module.End.supr_generalized_eigenspace_eq_top Module.End.iSup_generalizedEigenspace_eq_top
feat: port LinearAlgebra.Eigenspace.IsAlgClosed (#4943)

Dependencies 10 + 667

668 files ported (98.5%)
276957 lines ported (98.8%)
Show graph

The unported dependencies are