Root data and root systems #
This file contains basic definitions for root systems and root data.
Main definitions: #
RootPairing
: Given two perfectly-pairedR
-modulesM
andN
(over some commutative ringR
) a root pairing with indexing setι
is the data of anι
-indexed subset ofM
("the roots") anι
-indexed subset ofN
("the coroots"), and anι
-indexed set of permutations ofι
such that each root-coroot pair evaluates to2
, and the permutation attached to each element ofι
is compatible with the reflections on the corresponding roots and coroots.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 two linearly dependent roots are always related by a sign.RootPairing.weylGroup
: The group of linear isomorphisms onM
generated by reflections.RootPairing.weylGroupToPerm
: The permutation representation of the Weyl group onι
.
TODO #
- Base change of root pairings (may need flatness; perhaps should go in a different file).
- Crystallographic root systems are isomorphic to base changes of root systems over
ℤ
: TakeM₀
andN₀
to be theℤ
-span of roots and coroots.
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.
Furthermore, 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.
As a final point of divergence from the classical literature, we make the reflection permutation on
roots and coroots explicit, rather than specifying only that reflection preserves the sets of roots
and coroots. This is necessary when working with infinite root systems, where the coroots are not
uniquely determined by the roots, because without it, the reflection permutations on roots and
coroots may not correspond. For this purpose, we define a map from ι
to permutations on ι
, and
require that it is compatible with reflections and coreflections.
Given two perfectly-paired R
-modules M
and N
, a root pairing with indexing set ι
is the data of an ι
-indexed subset of M
("the roots"), an ι
-indexed subset of N
("the coroots"), and an ι
-indexed set of permutations of ι
, such that each root-coroot pair
evaluates to 2
, and the permutation attached to each element of ι
is compatible with the
reflections on the corresponding roots and coroots.
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 ⇑self.toLin.flip
- root : ι ↪ M
A parametrized family of vectors, called roots.
- coroot : ι ↪ N
A parametrized family of dual vectors, called coroots.
- root_coroot_two : ∀ (i : ι), (self.toLin (self.root i)) (self.coroot i) = 2
- reflection_perm : ι → ι ≃ ι
A parametrized family of permutations, induced by reflection.
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 ⇑self.toLin.flip
- root_coroot_two : ∀ (i : ι), (self.toLin (self.root i)) (self.coroot i) = 2
- reflection_perm : ι → ι ≃ ι
- reflection_perm_root : ∀ (i j : ι), self.root j - (self.toPerfectPairing (self.root j)) (self.coroot i) • self.root i = self.root ((self.reflection_perm i) j)
- reflection_perm_coroot : ∀ (i j : ι), self.coroot j - (self.toPerfectPairing (self.root i)) (self.coroot j) • self.coroot i = self.coroot ((self.reflection_perm i) j)
- span_eq_top : Submodule.span R (Set.range ⇑self.root) = ⊤
Instances For
If we interchange the roles of M
and N
, we still have a root pairing.
Equations
- P.flip = { toPerfectPairing := P.flip, root := P.coroot, coroot := P.root, root_coroot_two := ⋯, reflection_perm := P.reflection_perm, reflection_perm_root := ⋯, reflection_perm_coroot := ⋯ }
Instances For
Roots written as functionals on the coweight space.
Equations
- P.root' i = P.toPerfectPairing (P.root i)
Instances For
Coroots written as functionals on the weight space.
Equations
- P.coroot' i = P.flip (P.coroot i)
Instances For
This is the pairing between roots and coroots.
Equations
- P.pairing i j = (P.root' i) (P.coroot j)
Instances For
The reflection associated to a root.
Equations
- P.reflection i = Module.reflection ⋯
Instances For
The reflection associated to a coroot.
Equations
- P.coreflection i = Module.reflection ⋯
Instances For
A root pairing is said to be crystallographic if the pairing between a root and coroot is always an integer.
Equations
- P.IsCrystallographic = ∀ (i : ι), Set.MapsTo (⇑(P.root' i)) (Set.range ⇑P.coroot) ↑(AddSubgroup.zmultiples 1)
Instances For
A root pairing is said to be reduced if any linearly dependent pair of roots is related by a sign.
Equations
Instances For
The Weyl group
of a root pairing is the group of automorphisms of the weight space generated
by reflections in roots.
Equations
- P.weylGroup = Subgroup.closure (Set.range P.reflection)
Instances For
The permutation representation of the Weyl group induced by reflection_perm
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The Coxeter Weight of a pair gives the weight of an edge in a Coxeter diagram, when it is
finite. It is 4 cos² θ
, where θ
describes the dihedral angle between hyperplanes.
Instances For
Two roots are orthogonal when they are fixed by each others' reflections.