Root data and root systems #
This file contains basic definitions for root systems and root data.
Main definitions / results: #
RootPairing
: Given two perfectly-pairedR
-modulesM
andN
(over some commutative ringR
) a root pairing with finite indexing setι
is the data of anι
-indexed subset ofM
("the roots") and anι
-indexed subset ofN
("the coroots") satisfying the axioms familiar from the traditional theory of root systems / data.RootDatum
: A root datum is a root pairing for which the roots and coroots take values in finitely-generated free Abelian groups.RootSystem
: A root system is a root pairing for which the roots span their ambient module.RootPairing.IsCrystallographic
: A root pairing is said to be crystallographic if the pairing between a root and coroot is always an integer.RootPairing.IsReduced
: A root pairing is said to be reduced if it never contains the double of a root.RootPairing.ext
: In characteristic zero if there is no torsion, the correspondence between roots and coroots is unique.RootSystem.ext
: In characteristic zero if there is no torsion, a root system is determined entirely by its roots.RootSystem.mk'
: In characteristic zero if there is no torsion, to check that a family of roots form a root system, we do not need to check that the coroots are stable under reflections since this follows from the corresponding property for the roots.
Implementation details #
A root datum is sometimes defined as two subsets: roots and coroots, together with a bijection between them, subject to hypotheses. However the hypotheses ensure that the bijection is unique and so the question arises of whether this bijection should be part of the data of a root datum or whether one should merely assert its existence. For root systems, things are even more extreme: the coroots are uniquely determined by the roots. Furthermore a root system induces a canonical non-degenerate bilinear form on the ambient space and many informal accounts even include this form as part of the data.
We have opted for a design in which some of the uniquely-determined data is included: the bijection between roots and coroots is (implicitly) included and the coroots are included for root systems. Empirically this seems to be by far the most convenient design and by providing extensionality lemmas expressing the uniqueness we expect to get the best of both worlds.
A final point is that we require roots and coroots to be injections from a base indexing type ι
rather than subsets of their codomains. This design was chosen to avoid the bijection between roots
and coroots being a dependently-typed object. A third option would be to have the roots and coroots
be subsets but to avoid having a dependently-typed bijection by defining it globally with junk value
0
outside of the roots and coroots. This would work but lacks the convenient symmetry that the
chosen design enjoys: by introducing the indexing type ι
, one does not have to pick a direction
(roots → coroots
or coroots → roots
) for the forward direction of the bijection. Besides,
providing the user with the additional definitional power to specify an indexing type ι
is a
benefit and the junk-value pattern is a cost.
Given two perfectly-paired R
-modules M
and N
, a root pairing with finite indexing set ι
is the data of an ι
-indexed subset of M
("the roots") and an ι
-indexed subset of N
("the coroots") satisfying the axioms familiar from the traditional theory of root systems / data.
It exists to allow for a convenient unification of the theories of root systems and root data.
- bijectiveLeft : Function.Bijective ⇑self.toLin
- bijectiveRight : Function.Bijective ⇑(LinearMap.flip self.toLin)
- root : ι ↪ M
- coroot : ι ↪ N
- root_coroot_two : ∀ (i : ι), (self.toLin (self.root i)) (self.coroot i) = 2
- mapsTo_preReflection_root : ∀ (i : ι), Set.MapsTo (⇑(Module.preReflection (self.root i) ((LinearMap.flip self.toLin) (self.coroot i)))) (Set.range ⇑self.root) (Set.range ⇑self.root)
- mapsTo_preReflection_coroot : ∀ (i : ι), Set.MapsTo (⇑(Module.preReflection (self.coroot i) (self.toLin (self.root i)))) (Set.range ⇑self.coroot) (Set.range ⇑self.coroot)
Instances For
A root datum is a root pairing with coefficients in the integers and for which the root and coroot spaces are finitely-generated free Abelian groups.
Note that the latter assumptions [Free ℤ X₁] [Finite ℤ X₁] [Free ℤ X₂] [Finite ℤ X₂]
should be
supplied as mixins.
Equations
- RootDatum ι X₁ X₂ = RootPairing ι ℤ X₁ X₂
Instances For
A root system is a root pairing for which the roots span their ambient module.
Note that this is slightly more general than the usual definition in the sense that N
is not
required to be the dual of M
.
- bijectiveLeft : Function.Bijective ⇑self.toLin
- bijectiveRight : Function.Bijective ⇑(LinearMap.flip self.toLin)
- root : ι ↪ M
- coroot : ι ↪ N
- root_coroot_two : ∀ (i : ι), (self.toLin (self.root i)) (self.coroot i) = 2
- mapsTo_preReflection_root : ∀ (i : ι), Set.MapsTo (⇑(Module.preReflection (self.root i) ((LinearMap.flip self.toLin) (self.coroot i)))) (Set.range ⇑self.root) (Set.range ⇑self.root)
- mapsTo_preReflection_coroot : ∀ (i : ι), Set.MapsTo (⇑(Module.preReflection (self.coroot i) (self.toLin (self.root i)))) (Set.range ⇑self.coroot) (Set.range ⇑self.coroot)
- span_eq_top : Submodule.span R (Set.range ⇑self.root) = ⊤
Instances For
A root pairing is said to be crystallographic if the pairing between a root and coroot is always an integer.
Equations
- RootPairing.IsCrystallographic P = ∀ (i : ι), Set.MapsTo (⇑(P.toLin (P.root i))) (Set.range ⇑P.coroot) ↑(AddSubgroup.zmultiples 1)
Instances For
A root pairing is said to be reduced if it never contains the double of a root.
Equations
- RootPairing.IsReduced P = ∀ (i : ι), 2 • P.root i ∉ Set.range ⇑P.root
Instances For
If we interchange the roles of M
and N
, we still have a root pairing.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The reflection associated to a root.
Equations
- RootPairing.reflection P i = Module.reflection (_ : ((LinearMap.flip P.toLin) (P.coroot i)) (P.root i) = 2)
Instances For
The reflection associated to a coroot.
Equations
- RootPairing.coreflection P i = Module.reflection (_ : (P.toLin (P.root i)) (P.coroot i) = 2)
Instances For
Even though the roots may not span, coroots are distinguished by their pairing with the roots. The proof depends crucially on the fact that there are finitely-many roots.
Modulo trivial generalisations, this statement is exactly Lemma 1.1.4 on page 87 of SGA 3 XXI.
See also RootPairing.injOn_dualMap_subtype_span_root_coroot
for a more useful restatement.
In characteristic zero if there is no torsion, the correspondence between roots and coroots is unique.
Formally, the point is that the hypothesis hc
depends only on the range of the coroot mappings.
This lemma exists to support the definition RootSystem.mk'
and usually should not be used
directly. The lemma RootPairing.coroot_eq_coreflection_of_root_eq_of_span_eq_top
or even
RootSystem.coroot_eq_coreflection_of_root_eq
will usually be more convenient.
In characteristic zero if there is no torsion and the roots span, if the i
th reflection of the
j
th root is the k
th root, then the corresponding relationship holds for coroots. See also
RootSystem.coroot_eq_coreflection_of_root_eq
.
In characteristic zero if there is no torsion, a root system is determined entirely by its roots.
In characteristic zero if there is no torsion, to check that a family of roots form a root system, we do not need to check that the coroots are stable under reflections since this follows from the corresponding property for the roots.
Equations
- One or more equations did not get rendered due to their size.
Instances For
In characteristic zero if there is no torsion, if the i
th reflection of the j
th root is the
k
th root, then the corresponding relationship holds for coroots.