Long and short simple roots of a Dynkin type #
A Cartan matrix records more than an unoriented diagram: the ratio of a transposed pair of its
off-diagonal entries is the ratio of the squared lengths of the two simple roots. This file reads
that information off the standard Cartan matrices of TauCeti.DynkinType, pinning for each type
which of its nodes carry long simple roots and which carry short ones, and then proves that the
reading is correct against Mathlib's RootPairing.RootPositiveForm.rootLength.
Two pieces of data are attached to a type, both read off family by family.
TauCeti.DynkinType.rootLength gives the relative squared length of each simple root, normalised
for a valid type so that a shortest one has length 1; it symmetrises the standard Cartan matrix
on the right, A i j * ℓ j = A j i * ℓ i, so it is integral where the symmetriser d asked for
by TauCeti.IsFiniteType, which scales the matrix on the left, is rational: that one is the
reciprocal d i = (ℓ i)⁻¹. TauCeti.DynkinType.IsLongSimpleRoot then singles out the long nodes.
Away from the degenerate B 1 those are exactly the nodes of maximal length
(TauCeti.DynkinType.isLongSimpleRoot_iff), in particular for a valid type.
A handful of degenerate types stand between the family-wise reading and its intended meaning, and
each of the four statements below that meets one is proved first in its exact form, naming the
types it excludes, and then specialised to a valid type for the downstream consumers, which reach a
type through TauCeti.HasCartanType and so have validity and nothing else. The sole node of C 1
is the last node of the Cₙ family, hence long, of length 2: nothing shorter sits beside it to
normalise against, so rootLength is off by the factor 2 there. The sole node of B 1 is the
last node of the Bₙ family, hence short, while being of maximal length for want of competition:
that is the one type where the family-wise reading and the maximality reading of
IsLongSimpleRoot part company. Finally the rank-zero types A 0, B 0, C 0 and D 0 have no
node at all. A statement quantified over the nodes cannot see that, but an existential one can.
The Bourbaki numbering #
Everything here is stated against the node numbering of TauCeti.DynkinType.cartanMatrix, which is
Bourbaki's with node i at Fin index i - 1. Zero-based Fin indices against one-based
Bourbaki labels are the standing trap, so the numbering is pinned explicitly: the Aₙ chain runs
0, 1, …, n - 1 in order; Bₙ and Cₙ continue that chain with the double edge between n - 2
and n - 1, the short simple root being the last node of Bₙ and the long one the last node of
Cₙ; Dₙ forks at n - 3; Eₙ follows Bourbaki with index 1 the branch node; F₄ has
0, 1 long and 2, 3 short; and G₂ is short then long, so TauCeti.DynkinType.IsLongSimpleRoot
selects index 1 there.
G₂ is the one place where Mathlib's convention differs from Bourbaki's, and
TauCeti.DynkinType.cartanMatrix follows Bourbaki: Mathlib's CartanMatrix.G₂ = !![2, -3; -1, 2]
is documented as the transpose of Bourbaki's plate IX matrix, so the standard matrix pinned here is
CartanMatrix.G₂ᵀ = !![2, -1; -3, 2], whose short simple root comes first. That orientation is
what TauCeti.DynkinType.cartanMatrix_mul_rootLength forces: reading the lengths off the
transposed matrix instead would make that identity false.
Main definitions #
TauCeti.DynkinType.rootLength: the relative squared length of each simple root of a type.TauCeti.DynkinType.IsLongSimpleRoot: the nodes its family calls long, which for a valid type are exactly those carrying a simple root of maximal length.
Main results #
TauCeti.DynkinType.cartanMatrix_mul_rootLength: the standard Cartan matrix of a type is symmetrised on the right byrootLength, that isA i j * ℓ j = A j i * ℓ i. This is the identity that pins the relative lengths, and it holds for every type, valid or not.TauCeti.DynkinType.exists_rootLength_eq_one_iff: a type has a simple root of length1exactly when it has a node at all and is notC 1, whose sole node has length2; withTauCeti.DynkinType.rootLength_posthis is the normalisation of the lengths.TauCeti.DynkinType.exists_rootLength_eq_oneis the corollary for a valid type.TauCeti.DynkinType.isLongSimpleRoot_iff: outside the degenerateB 1, a node is long exactly when its simple root has maximal length;B 1has a single node, which is of maximal length whileIsLongSimpleRootcalls it short, because it is the short node of theBₙfamily.TauCeti.DynkinType.isLongSimpleRoot_iff_of_validis the corollary for a valid type.TauCeti.DynkinType.forall_isLongSimpleRoot_iff: a type has all its simple roots long exactly when it is simply laced, has no node at all, or isC 1; for a valid type this isTauCeti.DynkinType.forall_isLongSimpleRoot_iff_isSimplyLaced.TauCeti.DynkinType.exists_isLongSimpleRoot_iff: a type has a long simple root exactly when it has a node at all and is notB 1;TauCeti.DynkinType.exists_isLongSimpleRootis the corollary for a valid type.TauCeti.DynkinType.isLongSimpleRoot_congr: the predicate transports along an equality of diagrams.TauCeti.DynkinType.isLongSimpleRoot_C_iff_not_isLongSimpleRoot_B:BₙandCₙcarry the same diagram with the lengths exchanged.RootPairing.RootPositiveForm.rootLength_le_iff_pairingIn_le: in any root pairing carrying a root-positive form, two roots meeting at a strictly negative pairing compare in length exactly as the transposed pair of pairings compares. This is the statement that makes the Cartan-matrix reading above meaningful.RootPairing.RootPositiveForm.rootLength_le_iff_dynkinRootLength_le: for a base matched to a Dynkin type, adjacent simple roots compare in length exactly asTauCeti.DynkinType.rootLengthsays they do.
References #
See Bourbaki, Lie Groups and Lie Algebras, Chapters 4-6, plates I-IX, for the numbering and the root lengths, and Kac, Infinite Dimensional Lie Algebras, Chapter 2, for symmetrisable Cartan matrices.
The relative squared length of the simple roots of a Dynkin type, in the Bourbaki numbering of
TauCeti.DynkinType.cartanMatrix, given family by family and normalised, for a valid type, so that
a shortest simple root has length 1.
"Length" is squared length, as in Mathlib's RootPairing.RootPositiveForm.rootLength: it is the
value of an invariant form on a root with itself. The vector symmetrises the standard Cartan matrix
on the right (TauCeti.DynkinType.cartanMatrix_mul_rootLength), the symmetriser d that scales it
on the left, as in TauCeti.IsFiniteType, being the reciprocal d i = (ℓ i)⁻¹. Either way the
matrix alone determines the vector up to a positive factor once the diagram is connected; the
normalisation fixes that factor.
Validity is what the normalisation needs, and among the types of positive rank C 1 is the one
that lacks it (the rank-zero types have no node to normalise against): its sole node is
the last node of the Cₙ family, hence of length 2, with no shorter node beside it, so every
length there is twice what the normalisation would ask. That type is excluded by
TauCeti.DynkinType.Valid, and rootLength keeps the family-wise reading on it.
Equations
- (TauCeti.DynkinType.A n).rootLength x_2 = 1
- (TauCeti.DynkinType.D n).rootLength x_2 = 1
- TauCeti.DynkinType.E6.rootLength x_2 = 1
- TauCeti.DynkinType.E7.rootLength x_2 = 1
- TauCeti.DynkinType.E8.rootLength x_2 = 1
- (TauCeti.DynkinType.B n).rootLength i = if ↑i + 1 = n then 1 else 2
- (TauCeti.DynkinType.C n).rootLength i = if ↑i + 1 = n then 2 else 1
- TauCeti.DynkinType.F4.rootLength i = if ↑i < 2 then 2 else 1
- TauCeti.DynkinType.G2.rootLength i = if ↑i = 0 then 1 else 3
Instances For
Every simple root has positive length.
A Dynkin type has a simple root of length 1 exactly when it has a node at all and is not
C 1. With TauCeti.DynkinType.rootLength_pos this is the normalisation that
TauCeti.DynkinType.rootLength is stated up to: away from the two exceptions the shortest simple
roots are exactly those of length 1.
Both exceptions are degenerate. The rank-zero types A 0, B 0, C 0 and D 0 have no simple
root at all to exhibit; and the sole node of C 1 is the last node of the Cₙ family, which that
family calls long and gives length 2.
A valid Dynkin type has a simple root of length 1. This is
TauCeti.DynkinType.exists_rootLength_eq_one_iff for a valid type, which excludes both of its
exceptions: the rank-zero types and C 1.
A simply-laced type has all its simple roots of length 1.
The standard Cartan matrix of a Dynkin type is symmetrised on the right by rootLength.
Writing A = t.cartanMatrix and ℓ = t.rootLength, the products A i j * ℓ j are symmetric in
i and j, so ℓ i / ℓ j = A i j / A j i whenever the two nodes are joined. This is what fixes
the relative lengths, and with TauCeti.DynkinType.rootLength_pos it exhibits the rational
symmetriser d i = (ℓ i)⁻¹ that TauCeti.IsFiniteType asks for, which scales the matrix on the
left rather than on the right as ℓ does.
No validity hypothesis is needed: the identity holds for the degenerate low-rank types too.
A simple root of a Dynkin type is long when its type's family calls that node long, in the
Bourbaki numbering of TauCeti.DynkinType.cartanMatrix: simply-laced types have all their simple
roots of the same length, hence all long; Bₙ is short at its last node, Cₙ long only at its
last node, F₄ long at its first two nodes and G₂ long at its second, following Bourbaki's
numbering as TauCeti.DynkinType.cartanMatrix pins it.
Away from the degenerate B 1 this is exactly maximality of length among the simple roots
(TauCeti.DynkinType.isLongSimpleRoot_iff), in particular for a valid type
(TauCeti.DynkinType.isLongSimpleRoot_iff_of_valid). B 1 really is an exception: it has a single
node, of maximal length, that this predicate calls short as the short node of the Bₙ family.
Equations
- (TauCeti.DynkinType.A n).IsLongSimpleRoot x_2 = True
- (TauCeti.DynkinType.D n).IsLongSimpleRoot x_2 = True
- TauCeti.DynkinType.E6.IsLongSimpleRoot x_2 = True
- TauCeti.DynkinType.E7.IsLongSimpleRoot x_2 = True
- TauCeti.DynkinType.E8.IsLongSimpleRoot x_2 = True
- (TauCeti.DynkinType.B n).IsLongSimpleRoot i = (↑i + 1 < n)
- (TauCeti.DynkinType.C n).IsLongSimpleRoot i = (↑i + 1 = n)
- TauCeti.DynkinType.F4.IsLongSimpleRoot i = (↑i < 2)
- TauCeti.DynkinType.G2.IsLongSimpleRoot i = (↑i = 1)
Instances For
Equations
- (TauCeti.DynkinType.A n).instDecidablePredFinRankIsLongSimpleRoot = fun (x : Fin (TauCeti.DynkinType.A n).rank) => { decide := true, reflects_decide := ⋯ }
- (TauCeti.DynkinType.D n).instDecidablePredFinRankIsLongSimpleRoot = fun (x : Fin (TauCeti.DynkinType.D n).rank) => { decide := true, reflects_decide := ⋯ }
- TauCeti.DynkinType.E6.instDecidablePredFinRankIsLongSimpleRoot = fun (x : Fin TauCeti.DynkinType.E6.rank) => { decide := true, reflects_decide := ⋯ }
- TauCeti.DynkinType.E7.instDecidablePredFinRankIsLongSimpleRoot = fun (x : Fin TauCeti.DynkinType.E7.rank) => { decide := true, reflects_decide := ⋯ }
- TauCeti.DynkinType.E8.instDecidablePredFinRankIsLongSimpleRoot = fun (x : Fin TauCeti.DynkinType.E8.rank) => { decide := true, reflects_decide := ⋯ }
- (TauCeti.DynkinType.B n).instDecidablePredFinRankIsLongSimpleRoot = fun (i : Fin (TauCeti.DynkinType.B n).rank) => { decide := (↑i + 1).succ.ble n, reflects_decide := ⋯ }
- (TauCeti.DynkinType.C n).instDecidablePredFinRankIsLongSimpleRoot = fun (i : Fin (TauCeti.DynkinType.C n).rank) => { decide := (↑i + 1).beq n, reflects_decide := ⋯ }
- TauCeti.DynkinType.F4.instDecidablePredFinRankIsLongSimpleRoot = fun (i : Fin TauCeti.DynkinType.F4.rank) => { decide := (↑i).succ.ble 2, reflects_decide := ⋯ }
- TauCeti.DynkinType.G2.instDecidablePredFinRankIsLongSimpleRoot = fun (i : Fin TauCeti.DynkinType.G2.rank) => { decide := (↑i).beq 1, reflects_decide := ⋯ }
The long-root predicate transports along an equality of diagrams. Transporting the
statement together with its index type avoids dependent rewriting through DynkinType.rank.
A node of a Dynkin type other than B 1 is long exactly when its simple root has maximal
length.
The exception is not decoration. The degenerate type B 1 has a single node, necessarily of maximal
length, but TauCeti.DynkinType.IsLongSimpleRoot calls it short because it is the short node of
the Bₙ family; that node is the only counterexample among all the types.
A node of a valid Dynkin type is long exactly when its simple root has maximal length. This
is TauCeti.DynkinType.isLongSimpleRoot_iff for a valid type, which excludes its one exception
B 1.
Every simple root of a simply-laced type is long: all its simple roots have the same length.
A Dynkin type has all its simple roots long exactly when it is simply laced, has no node at
all, or is C 1. The multiply-laced types Bₙ, Cₙ, F₄ and G₂ each have a short simple
root, save in the two degenerate cases the right-hand side names: the rank-zero B 0 and C 0,
which have no node at all to be short, and C 1, whose sole node the Cₙ family calls long. The
remaining degenerate type B 1 is no exception, its sole node being short.
A valid Dynkin type has all its simple roots long exactly when it is simply laced. This is
TauCeti.DynkinType.forall_isLongSimpleRoot_iff for a valid type, which excludes both of its
degenerate cases: the rank-zero B 0 and C 0, and C 1.
A Dynkin type has a long simple root exactly when it has a node at all and is not B 1.
Both exceptions are degenerate: the rank-zero types have no node to be long, and the sole node of
B 1 is the short last node of the Bₙ family.
Every valid Dynkin type has a long simple root. This is
TauCeti.DynkinType.exists_isLongSimpleRoot_iff for a valid type, which excludes both of its
exceptions: the rank-zero types and B 1.
Types Bₙ and Cₙ have the same diagram with long and short exchanged. Their standard
Cartan matrices are transposes of one another (CartanMatrix.B_transpose), and this is that duality
read at the level of root lengths: a node long in one type is short in the other.
Two roots meeting at a strictly negative pairing compare in length exactly as their
transposed pair of pairings compares. This is the content behind reading root lengths off a
Cartan matrix: ⟨αᵢ, αⱼ^∨⟩ / ⟨αⱼ, αᵢ^∨⟩ is the ratio ‖αᵢ‖² / ‖αⱼ‖², so the more negative entry
belongs to the longer root.
The negativity hypothesis is what pins the direction. It is automatic for two distinct simple roots of a base, whose pairings are nonpositive, once they are not orthogonal; for a pair with positive pairings the comparison is reversed.
A base matched to a Dynkin type has its adjacent simple roots comparing in length exactly as
TauCeti.DynkinType.rootLength says. The matching e is taken as data rather than through
TauCeti.HasCartanType so that the statement names the node the comparison is made at; any witness
of TauCeti.HasCartanType supplies one, and since the left-hand side does not mention e, the
comparison read off the type is the same for every witness.
The hypothesis that the two nodes are joined is necessary: two simple roots that are orthogonal are
constrained by nothing, and in Cₙ for instance the first node is short although no neighbour of
it is longer.