Semisimple.jl 1.3.0

Pieter Belmans

2026/08/16

Semisimple.jl 1.3.0 is out. The 1.0.0 announcement was the last release post, so there is some catching up to do: 1.1.0 made everything faster, 1.2.0 added conveniences for Dynkin types, and 1.3.0 has one theme: everything that folds a weight into the dominant chamber can now fold into the dominant chamber of a root subsystem.

Relative folds

The functions conjugate_dominant_weight, conjugate_dominant_weight_with_elem, conjugate_dominant_weight_with_length, and is_singular all accept an optional set of nodes $S$ of the Dynkin diagram. They then reflect only in the simple roots indexed by $S$, so the Weyl group element they produce lives in the parabolic subgroup $\mathrm{W}_S$, and singularity means lying on a wall of that subsystem:

using Semisimple

λ = WeightLatticeElem(TypeA{3}, [-1, 2, -1])

conjugate_dominant_weight_with_length(λ)          # (ω1 + ω3, 2)
conjugate_dominant_weight_with_length(λ, (2, 3))  # (-ω1 + ω2 + ω3, 1)

is_singular(λ)          # true
is_singular(λ, (2, 3))  # false

Note how the relative fold is happy to leave a negative coordinate on node 1: dominance is only asked for on $S$. And a weight can be singular for the full Weyl group while being regular for $\mathrm{W}_S$, as above.

This is exactly the combinatorics behind the relative Borel–Weil–Bott theorem: the higher direct images along a projection of flag varieties are computed by the same $\rho$-shifted fold, restricted to the nodes of the fibre. It is what powers pushforward in PartialFlagVarieties.jl 0.3.0, and with 1.3.0 the fold lives where it belongs, next to the Weyl group.

The releases in between

1.1.0 was a performance release. The Weyl group kernels (dominant-chamber folds, Freudenthal, orbit traversal) are now specialized per rank rather than per Dynkin type, all simple types up to rank 10 come precompiled, and Freudenthal multiplicities are BigInt, since the Int values could overflow.

1.2.0 added three conveniences for Dynkin types:

The second one pairs well with the relative folds above: nodes picks the subsystem, and sub_dynkin_type tells you which type it has.

One rename

The unexported borel_weil_bott is now _borel_weil_bott: the underscore marks it as internal and outside semantic versioning. The theorem properly belongs to PartialFlagVarieties.jl, which builds it from the exported conjugate_dominant_weight_with_length; the copy in Semisimple.jl stays around to exercise the restricted fold from the tests.

Updating

Semisimple.jl is registered in the General registry, so:

using Pkg
Pkg.update("Semisimple")

As always, issues and feature requests are welcome on the repository.