-
Notifications
You must be signed in to change notification settings - Fork 346
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
[Merged by Bors] - feat (LinearAlgebra/RootSystem/Finite): nondegeneracy of canonical bilinear form restricted to root span #18569
Closed
Closed
Changes from 9 commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
daffa23
nondegeneracy on root span
ScottCarnahan 109aba0
Merge branch 'master' into ScottCarnahan/MoreBilinear
ScottCarnahan fec6f26
add kernel rank lemma
ScottCarnahan 99a7ab9
minor cleanup
ScottCarnahan 19c0f90
cleanup, positivity
ScottCarnahan 8aadfa9
Merge branch 'master' into ScottCarnahan/MoreBilinear
ScottCarnahan 9e0b73f
follow reviewer's suggestions
ScottCarnahan d0f3bd3
def docstrings
ScottCarnahan 9bad143
minimize imports
ScottCarnahan a25c6a1
Merge branch 'master' into ScottCarnahan/MoreBilinear
ScottCarnahan 1cca2e3
follow reviewer's suggestions
ScottCarnahan b9fdf6e
Merge branch 'master' into ScottCarnahan/MoreBilinear
ScottCarnahan e4f1d5d
follow reviewer's suggestions
ScottCarnahan 4c23080
commit changes from style linters
leanprover-community-mathlib4-bot 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 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 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 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 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 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 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 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 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
128 changes: 128 additions & 0 deletions
128
Mathlib/LinearAlgebra/RootSystem/Finite/Nondegenerate.lean
This file contains 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,128 @@ | ||
/- | ||
Copyright (c) 2024 Scott Carnahan. All rights reserved. | ||
Released under Apache 2.0 license as described in the file LICENSE. | ||
Authors: Scott Carnahan | ||
-/ | ||
import Mathlib.LinearAlgebra.BilinearForm.Basic | ||
import Mathlib.LinearAlgebra.Dimension.Localization | ||
import Mathlib.LinearAlgebra.QuadraticForm.Basic | ||
import Mathlib.LinearAlgebra.RootSystem.Finite.CanonicalBilinear | ||
import Mathlib.LinearAlgebra.RootSystem.RootPositive | ||
|
||
/-! | ||
# Nondegeneracy of the polarization on a finite root pairing | ||
We show that if the base ring of a finite root pairing is linearly ordered, then the canonical | ||
ScottCarnahan marked this conversation as resolved.
Show resolved
Hide resolved
ScottCarnahan marked this conversation as resolved.
Show resolved
Hide resolved
|
||
bilinear form is root-positive and positive-definite on the span of roots. | ||
From these facts, it is easy to show that Coxeter weights in a finite root pairing are bounded | ||
above by 4. Thus, the pairings of roots and coroots in a root pairing are restricted to the | ||
interval `[-4, 4]`. Furthermore, a linearly independent pair of roots cannot have Coxeter weight 4. | ||
For the case of crystallographic root pairings, we are thus reduced to a finite set of possible | ||
options for each pair. | ||
Another application is to the faithfulness of the Weyl group action on roots, and finiteness of the | ||
Weyl group. | ||
|
||
## Main results: | ||
* `RootPairing.rootForm_rootPositive`: `RootForm` is root-positive. | ||
* `RootPairing.polarization_domRestrict_injective`: The polarization restricted to the span of | ||
roots is injective. | ||
* `RootPairing.rootForm_pos_of_nonzero`: `RootForm` is strictly positive on non-zero linear | ||
combinations of roots. This gives us a convenient way to eliminate certain Dynkin diagrams from | ||
the classification, since it suffices to produce a nonzero linear combination of simple roots with | ||
non-positive norm. | ||
|
||
## References: | ||
* SGAIII Exp. XXI | ||
* Bourbaki, Lie groups and Lie algebras | ||
ScottCarnahan marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
## Todo | ||
* Weyl-invariance of RootForm and CorootForm | ||
ScottCarnahan marked this conversation as resolved.
Show resolved
Hide resolved
|
||
* Faithfulness of Weyl group perm action, and finiteness of Weyl group, over ordered rings. | ||
* Relation to Coxeter weight. In particular, positivity constraints for finite root pairings mean | ||
we restrict to weights between 0 and 4. | ||
-/ | ||
|
||
noncomputable section | ||
|
||
open Set Function | ||
open Module hiding reflection | ||
open Submodule (span) | ||
|
||
namespace RootPairing | ||
|
||
variable {ι R M N : Type*} | ||
|
||
variable [Fintype ι] [LinearOrderedCommRing R] [AddCommGroup M] [Module R M] [AddCommGroup N] | ||
[Module R N] (P : RootPairing ι R M N) | ||
ScottCarnahan marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
lemma rootForm_rootPositive : IsRootPositive P P.RootForm where | ||
zero_lt_apply_root i := P.rootForm_root_self_pos i | ||
symm := P.rootForm_symmetric | ||
apply_reflection_eq := P.rootForm_reflection_reflection_apply | ||
|
||
instance : Module.Finite R P.rootSpan := Finite.span_of_finite R <| finite_range P.root | ||
|
||
instance : Module.Finite R P.corootSpan := Finite.span_of_finite R <| finite_range P.coroot | ||
|
||
@[simp] | ||
lemma finrank_rootSpan_map_polarization_eq_finrank_corootSpan : | ||
finrank R (P.rootSpan.map P.Polarization) = finrank R P.corootSpan := by | ||
rw [← LinearMap.range_domRestrict] | ||
refine eq_of_le_of_le (Submodule.finrank_mono P.range_polarization_domRestrict_le_span_coroot) ?_ | ||
ScottCarnahan marked this conversation as resolved.
Show resolved
Hide resolved
|
||
have : IsReflexive R N := PerfectPairing.reflexive_right P.toPerfectPairing | ||
refine LinearMap.finrank_le_of_smul_regular P.corootSpan | ||
(LinearMap.range (P.Polarization.domRestrict P.rootSpan)) | ||
(smul_right_injective N (Ne.symm (ne_of_lt P.prod_rootForm_root_self_pos))) | ||
fun _ hx => ?_ | ||
obtain ⟨c, hc⟩ := (mem_span_range_iff_exists_fun R).mp hx | ||
rw [← hc, Finset.smul_sum] | ||
simp_rw [smul_smul, mul_comm, ← smul_smul] | ||
exact Submodule.sum_smul_mem (LinearMap.range (P.Polarization.domRestrict P.rootSpan)) c | ||
(fun c _ ↦ prod_rootForm_smul_coroot_mem_range_domRestrict P c) | ||
|
||
/-- An auxiliary lemma en route to `RootPairing.finrank_corootSpan_eq`. -/ | ||
private lemma finrank_corootSpan_le : | ||
finrank R P.corootSpan ≤ finrank R P.rootSpan := by | ||
rw [← finrank_rootSpan_map_polarization_eq_finrank_corootSpan] | ||
exact Submodule.finrank_map_le P.Polarization P.rootSpan | ||
|
||
lemma finrank_corootSpan_eq : | ||
finrank R P.corootSpan = finrank R P.rootSpan := | ||
le_antisymm P.finrank_corootSpan_le P.flip.finrank_corootSpan_le | ||
|
||
lemma disjoint_rootSpan_ker_polarization : | ||
Disjoint P.rootSpan (LinearMap.ker P.Polarization) := by | ||
have : IsReflexive R M := PerfectPairing.reflexive_left P.toPerfectPairing | ||
refine Submodule.disjoint_of_finrank_eq (L := P.rootSpan) P.Polarization ?_ | ||
rw [finrank_rootSpan_map_polarization_eq_finrank_corootSpan, finrank_corootSpan_eq] | ||
|
||
lemma mem_ker_polarization_of_rootForm_self_eq_zero {x : M} (hx : P.RootForm x x = 0) : | ||
x ∈ LinearMap.ker P.Polarization := by | ||
rw [LinearMap.mem_ker, Polarization_apply] | ||
rw [rootForm_self_zero_iff] at hx | ||
exact Fintype.sum_eq_zero _ fun i ↦ by simp [hx i] | ||
|
||
lemma eq_zero_of_mem_rootSpan_of_rootForm_self_eq_zero {x : M} | ||
(hx : x ∈ P.rootSpan) (hx' : P.RootForm x x = 0) : | ||
x = 0 := by | ||
rw [← Submodule.mem_bot (R := R), ← P.disjoint_rootSpan_ker_polarization.eq_bot] | ||
exact ⟨hx, P.mem_ker_polarization_of_rootForm_self_eq_zero hx'⟩ | ||
|
||
lemma _root_.RootSystem.rootFormAnisotropic (P : RootSystem ι R M N) : | ||
ScottCarnahan marked this conversation as resolved.
Show resolved
Hide resolved
|
||
P.RootForm.toQuadraticMap.Anisotropic := by | ||
refine fun x ↦ P.eq_zero_of_mem_rootSpan_of_rootForm_self_eq_zero ?_ | ||
rw [rootSpan, P.span_eq_top] | ||
exact Submodule.mem_top | ||
ScottCarnahan marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
lemma rootForm_pos_of_nonzero {x : M} (hx : x ∈ P.rootSpan) (h : x ≠ 0) : | ||
0 < P.RootForm x x := by | ||
refine lt_of_le_of_ne (P.rootForm_self_non_neg x) ?_ | ||
ScottCarnahan marked this conversation as resolved.
Show resolved
Hide resolved
|
||
contrapose! h | ||
exact eq_zero_of_mem_rootSpan_of_rootForm_self_eq_zero P hx h.symm | ||
|
||
lemma rootForm_restrict_nondegenerate : | ||
(P.RootForm.restrict P.rootSpan).Nondegenerate := | ||
LinearMap.IsRefl.nondegenerate_of_separatingLeft (LinearMap.IsSymm.isRefl fun x y => by | ||
simp [rootForm_apply_apply, mul_comm]) fun x h => SetLike.coe_eq_coe.mp | ||
(P.eq_zero_of_mem_rootSpan_of_rootForm_self_eq_zero (Submodule.coe_mem x) (h x)) | ||
|
||
end RootPairing |
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This can be proven in greater generality and much more easily:
I do this golfing in my own inequality PR #19311.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That is much better!