-
Notifications
You must be signed in to change notification settings - Fork 710
[Merged by Bors] - feat: add proof of Jordan-Chevalley-Dunford decomposition #10295
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
cfda4b7
feat: define Newton's method and prove decomposition as nilpotent + root
ocfnash c5003a6
Add import to Mathlib.lean
ocfnash 2e05f6c
Tidy up
ocfnash f767995
Fix naming
ocfnash 4f6bd22
Merge branch 'master' into ocfnash/nilpotent_newton
ocfnash 7d60c56
Fix after lemma rename
ocfnash 6ce7516
feat: add proof of Jordan-Chevalley-Dunford decomposition
ocfnash 91be2cb
Add import to `Mathlib.lean`
ocfnash c6a823a
Tidy up
ocfnash 221bfe2
merge master
ocfnash 8256430
Feedback from CR
ocfnash File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
/- | ||
Copyright (c) 2024 Oliver Nash. All rights reserved. | ||
Released under Apache 2.0 license as described in the file LICENSE. | ||
Authors: Oliver Nash | ||
-/ | ||
import Mathlib.Algebra.Squarefree.UniqueFactorizationDomain | ||
import Mathlib.Dynamics.Newton | ||
import Mathlib.FieldTheory.Perfect | ||
import Mathlib.LinearAlgebra.Semisimple | ||
|
||
/-! | ||
# Jordan-Chevalley-Dunford decomposition | ||
|
||
Given a finite-dimensional linear endomorphism `f`, the Jordan-Chevalley-Dunford theorem provides a | ||
sufficient condition for there to exist a nilpotent endomorphism `n` and a semisimple endomorphism | ||
`s`, such that `f = n + s` and both `n` and `s` are polynomial expressions in `f`. | ||
|
||
The condition is that there exists a separable polynomial `P` such that the endomorphism `P(f)` is | ||
nilpotent. This condition is always satisfied when the coefficients are a perfect field. | ||
|
||
The proof given here uses Newton's method and is taken from Chambert-Loir's notes: | ||
[Algebre](http://webusers.imj-prg.fr/~antoine.chambert-loir/enseignement/2022-23/agreg/algebre.pdf) | ||
|
||
## Main definitions / results: | ||
|
||
* `Module.End.exists_isNilpotent_isSemisimple`: an endomorphism of a finite-dimensional vector | ||
space over a perfect field may be written as a sum of nilpotent and semisimple endomorphisms. | ||
Moreover these nilpotent and semisimple components are polynomial expressions in the original | ||
endomorphism. | ||
|
||
## TODO | ||
|
||
* Uniqueness of decomposition (once we prove that the sum of commuting semisimple endomorphims is | ||
semisimple, this will follow from `Module.End.eq_zero_of_isNilpotent_isSemisimple`). | ||
|
||
-/ | ||
|
||
open Algebra Polynomial | ||
|
||
namespace Module.End | ||
|
||
variable {K V : Type*} [Field K] [AddCommGroup V] [Module K V] [FiniteDimensional K V] {f : End K V} | ||
|
||
theorem exists_isNilpotent_isSemisimple_of_separable_of_dvd_pow {P : K[X]} {k : ℕ} | ||
(sep : P.Separable) (nil : minpoly K f ∣ P ^ k) : | ||
∃ᵉ (n ∈ adjoin K {f}) (s ∈ adjoin K {f}), IsNilpotent n ∧ IsSemisimple s ∧ f = n + s := by | ||
set ff : adjoin K {f} := ⟨f, self_mem_adjoin_singleton K f⟩ | ||
set P' := derivative P | ||
have nil' : IsNilpotent (aeval ff P) := by | ||
use k | ||
obtain ⟨q, hq⟩ := nil | ||
rw [← AlgHom.map_pow, Subtype.ext_iff] | ||
simp [hq] | ||
have sep' : IsUnit (aeval ff P') := by | ||
obtain ⟨a, b, h⟩ : IsCoprime (P ^ k) P' := sep.pow_left | ||
replace h : (aeval f b) * (aeval f P') = 1 := by | ||
simpa only [map_add, map_mul, map_one, minpoly.dvd_iff.mp nil, mul_zero, zero_add] | ||
using (aeval f).congr_arg h | ||
refine isUnit_of_mul_eq_one_right (aeval ff b) _ (Subtype.ext_iff.mpr ?_) | ||
simpa [coe_aeval_mk_apply] using h | ||
obtain ⟨⟨s, mem⟩, ⟨⟨k, hk⟩, hss⟩, -⟩ := exists_unique_nilpotent_sub_and_aeval_eq_zero nil' sep' | ||
refine ⟨f - s, ?_, s, mem, ⟨k, ?_⟩, ?_, (sub_add_cancel f s).symm⟩ | ||
· exact sub_mem (self_mem_adjoin_singleton K f) mem | ||
· rw [Subtype.ext_iff] at hk | ||
simpa using hk | ||
· replace hss : aeval s P = 0 := by rwa [Subtype.ext_iff, coe_aeval_mk_apply] at hss | ||
exact isSemisimple_of_squarefree_aeval_eq_zero sep.squarefree hss | ||
|
||
/-- **Jordan-Chevalley-Dunford decomposition**: an endomorphism of a finite-dimensional vector space | ||
over a perfect field may be written as a sum of nilpotent and semisimple endomorphisms. Moreover | ||
these nilpotent and semisimple components are polynomial expressions in the original endomorphism. | ||
-/ | ||
theorem exists_isNilpotent_isSemisimple [PerfectField K] : | ||
∃ᵉ (n ∈ adjoin K {f}) (s ∈ adjoin K {f}), IsNilpotent n ∧ IsSemisimple s ∧ f = n + s := by | ||
obtain ⟨g, k, sep, -, nil⟩ := exists_squarefree_dvd_pow_of_ne_zero (minpoly.ne_zero_of_finite K f) | ||
rw [← PerfectField.separable_iff_squarefree] at sep | ||
exact exists_isNilpotent_isSemisimple_of_separable_of_dvd_pow sep nil | ||
|
||
end Module.End |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.