-
Notifications
You must be signed in to change notification settings - Fork 1.6k
feat: add Wanted statement for the classification of root systems
#43068
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
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,122 @@ | ||
| /- | ||
| Copyright (c) 2026 Oliver Nash. All rights reserved. | ||
| Released under Apache 2.0 license as described in the file LICENSE. | ||
| Authors: Oliver Nash | ||
| -/ | ||
| module | ||
|
|
||
| public import Mathlib.LinearAlgebra.Matrix.Cartan | ||
| public import Mathlib.LinearAlgebra.RootSystem.CartanMatrix | ||
| public import Mathlib.LinearAlgebra.RootSystem.OfBilinear | ||
|
|
||
| /-! | ||
| # The classification of root systems. | ||
|
|
||
| -/ | ||
|
|
||
| namespace RootPairing | ||
|
|
||
| variable | ||
| {ι : Type*} [Finite ι] | ||
| {K : Type*} [Field K] [CharZero K] | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why not over an arbitrary |
||
| {M : Type*} [AddCommGroup M] [Module K M] | ||
| {N : Type*} [AddCommGroup N] [Module K N] | ||
| {P : RootPairing ι K M N} | ||
|
|
||
| def Base.HasCM {n : Type*} [P.IsCrystallographic] (bs : P.Base) (A : Matrix n n ℤ) := | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Why not a
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Rather annoyingly, an abelian variety "has CM" (aka "has complex multiplication") if its endomorphism ring is large in some precise sense, and this is a standard abbreviation in the area. Can we not face |
||
| ∃ e, bs.cartanMatrix.reindex e e = A | ||
|
|
||
| /-! *Uniqueness* | ||
|
|
||
| Note that we already have `RootPairing.Base.equivOfCartanMatrixEq` so the statement below about | ||
| Cartan matrices really is all that is required. Note also that the triple-bond case is essentially | ||
| `RootPairing.IsG2.card_base_support_eq_two` (+ related API). | ||
|
|
||
| -/ | ||
|
|
||
| theorem_wanted Base.hasCM_A_or_B_or_C_or_D_or_E_or_F_or_G | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Doesn't this call for a definition of "classical groups", or something? It would probably just be an inductive type with the list of gadgets, but at least this statement would be nicer. Something like does it make sense?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It occurred to me that the current statement is not ideal for a different reason: this should really be a result about matrices and not use the language of root systems at all. The right statement is: theorem_wanted Matrix.IsFiniteCartan.exists_A_or_B_or_C_or_D_or_E_or_F_or_G
{ι : Type*} [Fintype ι] [DecidableEq ι]
(M : Matrix ι ι ℤ) (hM : M.IsFiniteCartan) (hM' : M.IsIndecomposable) :
(∃ n e, M.reindex e e = CartanMatrix.A n) ∨
(∃ n e, M.reindex e e = CartanMatrix.B n) ∨
(∃ n e, M.reindex e e = CartanMatrix.C n) ∨
(∃ n e, M.reindex e e = CartanMatrix.D n) ∨
(∃ e, M.reindex e e = CartanMatrix.E 6) ∨
(∃ e, M.reindex e e = CartanMatrix.E 7) ∨
(∃ e, M.reindex e e = CartanMatrix.E 8) ∨
(∃ e, M.reindex e e = CartanMatrix.F₄) ∨
(∃ e, M.reindex e e = CartanMatrix.G₂)This needs #43121 so I'll return to this work once that is (hopefully!) in master. |
||
| [P.IsReduced] [P.IsCrystallographic] [P.IsIrreducible] [P.IsRootSystem] | ||
| (bs : P.Base) : | ||
| (∃ n, bs.HasCM (CartanMatrix.A n)) ∨ | ||
| (∃ n, bs.HasCM (CartanMatrix.B n)) ∨ | ||
| (∃ n, bs.HasCM (CartanMatrix.C n)) ∨ | ||
| (∃ n, bs.HasCM (CartanMatrix.D n)) ∨ | ||
| bs.HasCM (CartanMatrix.E 6) ∨ | ||
| bs.HasCM (CartanMatrix.E 7) ∨ | ||
| bs.HasCM (CartanMatrix.E 8) ∨ | ||
| bs.HasCM CartanMatrix.F₄ ∨ | ||
| bs.HasCM CartanMatrix.G₂ | ||
|
|
||
| /-! *Existence* | ||
|
|
||
| Probably the best route is to construct these by developing further API for `RootPairing.ofBilinear` | ||
| and then invoking it with appropriate matrices over `ℤ`. | ||
|
|
||
| -/ | ||
|
|
||
| variable (ι K M N) (n : ℕ) [NeZero n] | ||
|
|
||
| def_wanted a : RootPairing (Fin <| n * (n + 1)) K M N | ||
| instance_wanted : (❰a❱ K M N n).IsReduced | ||
| instance_wanted : (❰a❱ K M N n).IsIrreducible | ||
| instance_wanted : (❰a❱ K M N n).IsValuedIn ℤ | ||
| instance_wanted : (❰a❱ K M N n).IsRootSystem | ||
| theorem_wanted a_hasCM_a : ∀ bs : (❰a❱ K M N n).Base, bs.HasCM (CartanMatrix.A n) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Actually only the |
||
|
|
||
| def_wanted b : RootPairing (Fin <| 2 * n * n) K M N | ||
| instance_wanted : (❰b❱ K M N n).IsReduced | ||
| instance_wanted : (❰b❱ K M N n).IsIrreducible | ||
| instance_wanted : (❰b❱ K M N n).IsValuedIn ℤ | ||
| instance_wanted : (❰b❱ K M N n).IsRootSystem | ||
| theorem_wanted b_hasCM_b : ∀ bs : (❰b❱ K M N n).Base, bs.HasCM (CartanMatrix.B n) | ||
|
|
||
| def_wanted c : RootPairing (Fin <| 2 * n * n) K M N | ||
| instance_wanted : (❰c❱ K M N n).IsReduced | ||
| instance_wanted : (❰c❱ K M N n).IsIrreducible | ||
| instance_wanted : (❰c❱ K M N n).IsValuedIn ℤ | ||
| instance_wanted : (❰c❱ K M N n).IsRootSystem | ||
| theorem_wanted c_hasCM_c : ∀ bs : (❰c❱ K M N n).Base, bs.HasCM (CartanMatrix.C n) | ||
|
|
||
| def_wanted d : RootPairing (Fin <| 2 * n * (n - 1)) K M N | ||
| instance_wanted : (❰d❱ K M N n).IsReduced | ||
| theorem_wanted d_isIrreducible (hn : n ≠ 2) : (❰d❱ K M N n).IsIrreducible | ||
| instance_wanted : (❰d❱ K M N n).IsValuedIn ℤ | ||
| instance_wanted : (❰d❱ K M N n).IsRootSystem | ||
| theorem_wanted d_hasCM_d : ∀ bs : (❰d❱ K M N n).Base, bs.HasCM (CartanMatrix.D n) | ||
|
|
||
| def_wanted e₆ : RootPairing (Fin 72) K M N | ||
| instance_wanted : (❰e₆❱ K M N).IsReduced | ||
| instance_wanted : (❰e₆❱ K M N).IsIrreducible | ||
| instance_wanted : (❰e₆❱ K M N).IsValuedIn ℤ | ||
| instance_wanted : (❰e₆❱ K M N).IsRootSystem | ||
| theorem_wanted e₆_hasCM_e₆ : ∀ bs : (❰e₆❱ K M N).Base, bs.HasCM (CartanMatrix.E 6) | ||
|
|
||
| def_wanted e₇ : RootPairing (Fin 126) K M N | ||
| instance_wanted : (❰e₇❱ K M N).IsReduced | ||
| instance_wanted : (❰e₇❱ K M N).IsIrreducible | ||
| instance_wanted : (❰e₇❱ K M N).IsValuedIn ℤ | ||
| instance_wanted : (❰e₇❱ K M N).IsRootSystem | ||
| theorem_wanted e₇_hasCM_e₇ : ∀ bs : (❰e₇❱ K M N).Base, bs.HasCM (CartanMatrix.E 7) | ||
|
|
||
| def_wanted e₈ : RootPairing (Fin 240) K M N | ||
| instance_wanted : (❰e₈❱ K M N).IsReduced | ||
| instance_wanted : (❰e₈❱ K M N).IsIrreducible | ||
| instance_wanted : (❰e₈❱ K M N).IsValuedIn ℤ | ||
| instance_wanted : (❰e₈❱ K M N).IsRootSystem | ||
| theorem_wanted e₈_hasCM_e₈ : ∀ bs : (❰e₈❱ K M N).Base, bs.HasCM (CartanMatrix.E 8) | ||
|
|
||
| def_wanted f₄ : RootPairing (Fin 48) K M N | ||
| instance_wanted : (❰f₄❱ K M N).IsReduced | ||
| instance_wanted : (❰f₄❱ K M N).IsIrreducible | ||
| instance_wanted : (❰f₄❱ K M N).IsValuedIn ℤ | ||
| instance_wanted : (❰f₄❱ K M N).IsRootSystem | ||
| theorem_wanted f₄_hasCM_f₄ : ∀ bs : (❰f₄❱ K M N).Base, bs.HasCM CartanMatrix.F₄ | ||
|
|
||
| def_wanted g₂ : RootPairing (Fin 12) K M N | ||
| instance_wanted : (❰g₂❱ K M N).IsReduced | ||
| instance_wanted : (❰g₂❱ K M N).IsIrreducible | ||
| instance_wanted : (❰g₂❱ K M N).IsValuedIn ℤ | ||
| instance_wanted : (❰g₂❱ K M N).IsRootSystem | ||
| theorem_wanted g₂_hasCM_g₂ : ∀ bs : (❰g₂❱ K M N).Base, bs.HasCM CartanMatrix.G₂ | ||
|
|
||
| end RootPairing | ||
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.
Could you add a small description for the un-initiated, perhaps with a (precise) reference?